我需要在我的应用中连续请求位置,它应该始终是后台服务。
我需要每两分钟左右拉一次。我想过使用服务,在onStartCommand
我会使用locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MINIMUM_TIME_INTERVAL, MINIMUM_DISTANCE, this);
以及locationmanager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MINIMUM_TIME_INTERVAL, MINIMUM_DISTANCE, this);
但我担心随着时间的推移,这个requestLocationUpdates会停止给我一个位置。所以我想到使用AlarmManager
所以它一直在给我位置。
我的问题是,是否有必要使用AlarmManager
来提醒获取位置,或者如果我使用AlarmManager
会耗尽大量电池。
我只是想知道在后台获取位置的最佳方法。 提前谢谢。
答案 0 :(得分:3)
为什么要为此使用服务?对我来说,它没有服务。我有一个名为GPSlistener的类,它实现了LocationListener并在其构造函数中包含以下行:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, this);
我正在使用这种方法,因为我不希望locationUpdates停止,但您可以使用此方法开始收听:
public void startListening(){
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, this);
}
然后停止聆听:
public void stopListening(){
locationManager.removeUpdates(this)
}
您可以通过设置更高的minTime或minDistance来节省电量。我相信minDistance应该对你更有意义。因此,例如,如果您只想每10米更新一次位置,那么您可以像这样称呼它
locationManager.requestLocationUpdates(LocationManager.GPS_Provider, 5000, 10, this)
最佳设置取决于您的应用。例如,如果您要构建骑行的GPS导航,则应在最长5米后使用位置更新。另一方面,如果你正在为一些像“徒步旅行”这样的“慢”活动构建应用程序,那么10或15米就足够了。
我不认为locationManager应该停止发送位置更新,我也没有在我的应用程序中遇到此问题。
通过使用这种方法,我可以在不使用服务的情况下在后台运行GPS。但事实是我的应用程序只包含一个活动和3个片段,因此我不需要使用服务。
答案 1 :(得分:0)
此链接对您有用吗?
http://wptrafficanalyzer.in/blog/android-gps-with-locationmanager-to-get-current-location-example/
使用服务来监听位置(LocationListener)
答案 2 :(得分:0)
新的Google Play location APIs是迄今为止最好的方式。 融合位置API会考虑所有位置提供商和您需要的位置准确度,以便为您的应用提供最佳位置。
地理围栏API(当用户进入/离开某个区域时通知您的应用)和活动识别API(用户走路?坐着?跑步?驾驶?)对于节省电池和提高准确性也非常有帮助
当然,这需要用户拥有Google Play应用的更新版本,但这不应该是一个值得关注的问题。