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

转载于:https://www.cnblogs.com/java20130725/archive/2013/02/09/3215850.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值