我正在开发Android应用程序;此应用程序需要定期(每10分钟)将当前位置(共存)发送到Web服务。但是......对于更正确的方式(并且设备电池更友好),我有点困惑。
我读了这个answer,她的方法_getLocation()
看起来很顺利;但我不知道这种方法是否可以获得我需要的位置;总可用性......
我想,如果使用GSM / WIFI无法使用该位置,应用程序会选择GPS方式。
这就是制作这种方法的原因吗?
private void _getLocation() {
// Get the location manager
LocationManager locationManager = (LocationManager)
getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String bestProvider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(bestProvider);
try {
lat = location.getLatitude();
lon = location.getLongitude();
} catch (NullPointerException e) {
lat = -1.0;
lon = -1.0;
}
}
任何人都知道一种定期获取设备坐标的方法......不会大幅增加电池消耗量吗?
答案 0 :(得分:4)
如果您担心电池并且在10分钟间隔内没有那么严格,您可以尝试使用PassiveProvider而不是GPS / Coarse。
通常其他应用程序经常请求位置,因此您不必担心它
如果你是严格的,那么你可以尝试自己询问位置,以防万一在过去的时间间隔内没有收到。
以下是使用被动提供程序的示例。
LocationManager locationManager = (LocationManager) this
.getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onLocationChanged(Location location) {
// Do work with new location. Implementation of this method will be covered later.
doWorkWithNewLocation(location);
}
};
long minTime = 10*60*1000;
long minDistance = 0;
locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, minTime, minDistance, locationListener);
答案 1 :(得分:1)
Play服务具有低消耗位置API。您可以在Android Developer Site
中找到更多信息<强>更新强>
Here您可以找到存储在Github中的Play Location Service示例。查看LocationUpdates示例。
当您设置位置请求时,您可以更改优先级,请参阅更多信息here。我认为你使用PRIORITY_BALANCED_POWER_ACCURACY