zoukankan      html  css  js  c++  java
  • 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); 

  • 相关阅读:
    在Delphi中如何创建和使用udl文件
    《深入浅出struts》读书笔记(2)
    指针与数组
    《深入浅出struts》读书笔记
    《深入浅出struts》读书笔记(3)
    《深入浅出struts》读书笔记(3)
    指针的简单使用
    指针的简单使用
    指针与数组
    《深入浅出struts》读书笔记
  • 原文地址:https://www.cnblogs.com/java20130725/p/3215850.html
Copyright © 2011-2022 走看看