• Google位置服务模板 java程序员


    LocationManager locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE); 
    //定义一个监听器来响应位置的更新 
    LocationListener locationListener = new LocationListener() 
    { 
        public void onLocationChanged(Location location) 
        { 
            useNewLocation(location); 
        } 
        public void onStatusChanged(String provider, int status, Bundle extras) 
        { 
        } 
        public void onProviderEnabled(String provider) 
        { 
        } 
        public void onProviderDisabled(String provider) 
        { 
        } 
    }; 
    //注册监听器接收位置信息 
    LocationProvider locationProvider = LocationManager.NETWORK_PROVIDER; 
    //LocationProvider locationProvider=LocationManager.GPS_PROVIDER; 
    locationManager.requestLocationUpdates(locationProvider, 0, 0, locationListener); 
    //停止监听 
    locationManager.removeUpdates(locationListener); 
    //利用缓存的位置信息 
    Location lastKnowLocation = locationManager.getLastKnowLocation(locationProvider); 
    //维护一个最佳估测量的完整逻辑 
    private static final int TWO_MINUTES = 1000 * 60 * 2; 
    protected boolean isBetterLocation(Location location, Location currentBestLocation) 
    { 
        if(currentBestLocation == null) 
        { 
            return true; 
        } 
        long timeDelta = location.getTime() - currentBestLocation.getTime(); 
        boolean isSignificantlyNewer = timeDelta > TWO_MINUTES; 
        boolean isSignificantlyOlder = timeDelta < -TWO_MINUTES; 
        boolean isNewer = timeDelta > 0; 
        if(isSignificantlyNewer) 
        { 
            return true; 
        } 
        else if(isSignificantlyOlder) 
        { 
            return false; 
        } 
        int accuracyDelta = (int)(location.getAccuracy() - currentBestLocation.getAccuracy()); 
        boolean isLessAccurate = accuracyDelta > 0; 
        boolean isMoreAccurate = accuracyDelta < 0; 
        boolean isSignificantlyLessAccurate = accuracyDelta > 200; 
        boolean isFromSameProvider = isSameProvider(location.getProvider(), currentBestLocation.getProvider()); 
        if(isMoreAccurate) 
        { 
            return true; 
        } 
        else if(isNewer && !isLessAccurate) 
        { 
            return true; 
        } 
        else if(isNewer && !isSignificantlyLessAccurate && isFromSameProvider) 
        { 
            return true; 
        } 
        return false; 
    } 
    private boolean isSameProvider(String provider1, String provider2) 
    { 
        if(provider1 == null) 
        { 
            return provider == null; 
        } 
        return provider1.equals(provider2); 
    }
    
    //选择合适的位置服务提供者
    
    Criteria criteria = new Criteria(); 
    //经度要求 
    criteria.setAccuracy(Criteria.ACCURACY_FINE); 
    criteria.setAltitudeRequired(false); 
    criteria.setBearingRequired(false); 
    criteria.setCostAllowed(false); 
    criteria.setPowerRequirement(Criteria.POWER_LOW); 
    //取得效果最好的criteria 
    String provider = mlocationManager.getBestProvider(criteria, true); 

  • 相关阅读:
    unity_动画_状态机
    有内涵的技术论坛
    ios开发——常用经典算法OC篇&冒泡/快速
    iOS开发——C篇&文件操作
    iOS开发——C篇&预处理
    iOS开发——C篇&结构体与枚举
    iOS开发——C篇&函数解析
    iOS开发——C篇&动态内存分析
    UML第二次作业(代码互评)
    我与UML相爱相杀的狗血日常
  • 原文地址:https://www.cnblogs.com/java20130725/p/3215850.html
Copyright © 2020-2023  润新知