Google位置服务模板

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); 

posted @ 2013-02-09 15:18  java程序员-c  阅读(161)  评论(0编辑  收藏  举报