【发布时间】:2011-11-02 11:00:39
【问题描述】:
如何使用 locationManager(GPS 和 NETWORK PROVIDER)只读取一次位置,而不再寻找位置更新以节省电池?
【问题讨论】:
标签: android
如何使用 locationManager(GPS 和 NETWORK PROVIDER)只读取一次位置,而不再寻找位置更新以节省电池?
【问题讨论】:
标签: android
虽然requestSingleUpdate() 是技术上正确的答案,但您应该使用
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, mLocationListener);
获得第一个位置后稍等片刻。该位置往往会摇晃几秒钟。要确定修复是否稳定使用,location.getAccuracy()。一旦准确率稳定,请致电locationManager.removeUpdates(mLocationListener);
【讨论】:
requestSingleUpdate() - 有什么优势?谢谢
public LocationManager locationManager;
try {
locationManager.requestSingleUpdate( LocationManager.GPS_PROVIDER, new MyLocationListenerGPS(), null );
} catch ( SecurityException e ) { e.printStackTrace(); }
public class MyLocationListenerGPS implements LocationListener {
@Override
public void onLocationChanged(Location location) {
// your code and required methods go here...
}
在“requestSingleUpdate”中使用“null”可将更新检查保持在同一线程上(用于服务中)。如果您从活动中运行它,该方法允许您将其放入 Looper 中。我认为使用异步任务会是更好的方法。
【讨论】:
只需从位置管理器中删除更新。
locationManager.removeUpdates(this);
【讨论】:
请阅读获取用户位置开发者指南: http://developer.android.com/guide/topics/location/obtaining-user-location.html
This link for best Performance
不要忘记在 Android 清单中指定 android.permission.ACCESS_FINE_LOCATION
【讨论】:
要获取位置,您可以参考此link 并搜索 requestSingleUpdate
【讨论】:
只要阅读位置更新就很容易了
locationManager.requestLocationUpdates(provider, 400, 1, this);
并在读取位置后调用一次
locationManager.removeUpdates(this);
因此系统不会在此之后要求更新位置,您可以节省电池电量。
【讨论】:
将requestSingleUpdate 与您的LocationManager 一起使用。
有关更多信息,官方指南很有趣:
INFO
【讨论】: