考虑到电池,Android在后台重复获取位置的最佳方式

时间:2014-12-05 10:22:56

标签: android service gps location alarmmanager

我需要在我的应用中连续请求位置,它应该始终是后台服务。

我需要每两分钟左右拉一次。我想过使用服务,在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会耗尽大量电池。

我只是想知道在后台获取位置的最佳方法。 提前谢谢。

3 个答案:

答案 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应用的更新版本,但这不应该是一个值得关注的问题。