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

Nav*_*Nav 11 service gps android 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它会耗尽大量的电池.

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

hor*_*rin 3

为什么要为此使用服务?对我来说,它无需服务即可工作。我有一个名为 GPSlistener 的类,它实现 LocationListener 并在其构造函数中包含这一行:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, this);
Run Code Online (Sandbox Code Playgroud)

我使用这种方法是因为我不希望 locationUpdates 停止,但您可以使用此方法开始监听:

public void startListening(){
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, this);
}
Run Code Online (Sandbox Code Playgroud)

然后停止监听:

public void stopListening(){
    locationManager.removeUpdates(this)
}
Run Code Online (Sandbox Code Playgroud)

您可以通过设置更高的 minTime 或 minDistance 来节省电池。我相信 minDistance 应该与您更相关。例如,如果您只想每 10 米更新一次位置,那么您可以这样称呼它

locationManager.requestLocationUpdates(LocationManager.GPS_Provider, 5000, 10, this)

最佳设置取决于您的应用程序。例如,如果您想为骑行构建 GPS 导航,那么您应该在最多 5m 后使用位置更新。另一方面,如果您正在为一些“较慢”的活动(例如徒步旅行)构建应用程序,那么我认为 10 或 15 米就足够了。

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

通过使用这种方法,我可以在后台运行 GPS,而无需使用服务。但事实是,我的应用程序仅包含 1 个 Activity 和 3 个片段,因此我不需要使用服务。