如何使用locationManager(GPS和NETWORK PROVIDER)只读取一次位置而不再查找位置更新?

Dam*_*mir 22 android

如何使用locationManager(GPS和NETWORK PROVIDER)只读取一次位置,而不再查找位置更新,以节省电池电量?

Ren*_*eno 29

虽然requestSingleUpdate()技术上是正确答案,但您应该使用

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, mLocationListener);
Run Code Online (Sandbox Code Playgroud)

在获得第一个位置后等待一段时间.该位置倾向于摆动几秒钟.要确定修复是否稳定使用,location.getAccuracy().准确度稳定后,请致电locationManager.removeUpdates(mLocationListener);

  • @fuzzy GPS定位需要几秒钟才能稳定下来.第一个位置的准确性通常很差. (7认同)
  • 你能详细说明为什么应该使用上面代替`requestSingleUpdate()` - 有什么好处?谢谢 (6认同)
  • 我们怎么能等几秒钟?我们应该睡觉吗? (3认同)
  • 当我实现这个方法时,我必须实际移动它才能识别出已经改变的位置.我基本上希望能够在不必先移动的情况下获得我当前的GPS坐标. (2认同)
  • 如果位置足够稳定,如何检查位置的准确性? (2认同)

Que*_*ERC 6

只需从位置管理器中删除更新。

locationManager.removeUpdates(this);
Run Code Online (Sandbox Code Playgroud)


Vik*_*len 6

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...
}
Run Code Online (Sandbox Code Playgroud)

在 'requestSingleUpdate' 中使用 'null' 可以在同一线程上保持更新检查(用于服务)。如果您从活动中运行它,该方法允许您将其放入 Looper。我认为使用异步任务会是更好的方法。


bla*_*deX 1

请阅读获取用户位置开发人员指南: http://developer.android.com/guide/topics/location/obtaining-user-location.html

此链接可获得最佳性能

不要忘记在 Android 清单中指定android.permission.ACCESS_FINE_LOCATION