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

Posted

技术标签:

【中文标题】考虑到电池,Android 在后台重复获取位置的最佳方法【英文标题】:Android best way to get location repeatedly in background considering battery as well 【发布时间】:2015-02-03 11:49:56 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

您为什么要为此使用服务?对我来说,它在没有服务的情况下工作。我有一个名为 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 导航,那么您应该在最大 5m 后使用位置更新。另一方面,如果您正在为一些“较慢”的活动(如徒步旅行)构建应用程序,那么我认为 10 或 15 米就足够了。

我不认为 locationManager 应该停止发送位置更新,而且我的应用程序中也没有这个问题。

通过使用这种方法,我可以在不使用服务的情况下在后台运行 GPS。但事实是我的应用程序只包含一个活动和 3 个片段,所以我不需要使用服务。

【讨论】:

服务是必需的,因为即使应用程序没有在后台运行,我也应该能够获取位置。所以使用服务对我有帮助。 好吧,我相信 requestLocationUpdates 会启动服务,所以我认为您不需要为此启动自己的服务。您的问题是 requestLocationUpdates 在短暂的时间后停止发送位置?我理解正确吗? 那么我相信我发布的解决方案是正确的。至少我在我的应用程序中使用它并且它具有您想要的完全相同的行为。 @horin:如果您的应用程序被终止,它将停止跟踪。使用服务可以确保它始终跟踪【参考方案2】:

新的 google play location APIs 是迄今为止最好的方法。 融合位置 API 会考虑所有位置提供者和您需要的位置准确性,以便为您的应用提供最佳位置。

地理围栏 API(当用户进入/离开某个区域时通知您的应用)和活动识别 API(用户是否在走路?坐着?跑步?开车?)也可以非常有助于节省电池和提高准确性.

当然,这需要用户拥有 Google Play 应用的更新版本,但这应该不是什么大问题。

【讨论】:

这实际上是非谷歌许可设备的一个问题。 Kindle Fires 没有 Google Play,也没有任何定制 ROM 或许多亚洲小型 OEM。当然,除非他们盗版。 在这种情况下,当且仅当 google play 服务不可用时,默认为 androids 位置管理器。【参考方案3】:

此链接对您有用吗?

http://wptrafficanalyzer.in/blog/android-gps-with-locationmanager-to-get-current-location-example/

使用服务监听位置(LocationListener)

【讨论】:

以上是关于考虑到电池,Android 在后台重复获取位置的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

Android上的后台位置管理

在 Android 8+ 中无法获取 HIGH_ACCURACY 背景位置

当应用程序切换到后台时,我的 android 位置服务被终止

需要在我的应用程序在后台时获取我的位置

将应用程序带到前台时获取准确的坐标

如何在运行时获取 Android 中的电池统计信息?