定期获取位置(坐标)而不会显着增加电池消耗
Get location (coordinates) periodically without dramatically increase battery consumption
我正在开发 Android 应用程序;此应用程序需要定期(每 10 分钟)将当前位置(坐标)发送到网络服务。但是......我对更正确的方法(对设备电池更友好)感到有点困惑。
我读了这个 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;
}
}
有人知道一种定期获取设备坐标的方法...而不会显着增加电池消耗吗?
Play 服务有一个低消费位置 API。您可以在 Android Developer Site
中找到更多信息
更新
Here you can found a example of Play Location Service stored in Github. Look the LocationUpdates 示例。
设置位置请求时,您可以更改优先级,请参阅更多信息 here。我认为你使用 PRIORITY_BALANCED_POWER_ACCURACY
如果您担心电池问题并且对 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);
我正在开发 Android 应用程序;此应用程序需要定期(每 10 分钟)将当前位置(坐标)发送到网络服务。但是......我对更正确的方法(对设备电池更友好)感到有点困惑。
我读了这个 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;
}
}
有人知道一种定期获取设备坐标的方法...而不会显着增加电池消耗吗?
Play 服务有一个低消费位置 API。您可以在 Android Developer Site
中找到更多信息更新
Here you can found a example of Play Location Service stored in Github. Look the LocationUpdates 示例。
设置位置请求时,您可以更改优先级,请参阅更多信息 here。我认为你使用 PRIORITY_BALANCED_POWER_ACCURACY
如果您担心电池问题并且对 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);