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

考虑到电池,Android是在后台重复获取位置的最佳方法,android,service,gps,location,alarmmanager,Android,Service,Gps,Location,Alarmmanager,我需要在我的应用程序中不断请求位置,它应该始终是一个后台服务 我大约每两分钟就需要一杯拿铁。我想使用一个服务,在onStartCommand中,我会使用locationmanager.requestLocationUpdates(locationmanager.GPS\u提供者,最小时间间隔,最小距离,这个)以及locationmanager.requestLocationUpdates(locationmanager.NETWORK\u提供程序、最小时间间隔、最小距离等) 但我担心随着时间的推

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

我大约每两分钟就需要一杯拿铁。我想使用一个服务,在
onStartCommand
中,我会使用
locationmanager.requestLocationUpdates(locationmanager.GPS\u提供者,最小时间间隔,最小距离,这个)
以及
locationmanager.requestLocationUpdates(locationmanager.NETWORK\u提供程序、最小时间间隔、最小距离等)

但我担心随着时间的推移,这个requestLocationUpdates不再提供我的位置。所以我想到了使用
AlarmManager
,所以它一直在给我定位

我的问题是,是否有必要使用
AlarmManager
来提醒获取位置,或者如果我使用
AlarmManager
会消耗大量电池电量

我只是想知道获取背景位置的最佳方法。
提前感谢。

您为什么要为此使用服务?对我来说,它在没有服务的情况下工作。我有一个名为GPSlistener的类,它实现了LocationListener,并且在其构造函数中有以下行:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, this);
我使用此方法是因为我不希望LocationUpdate停止,但您可以使用此方法开始侦听:

public void startListening(){
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, this);
}
public void stopListening(){
    locationManager.removeUpdates(this)
}
然后这是停止倾听的原因:

public void startListening(){
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, this);
}
public void stopListening(){
    locationManager.removeUpdates(this)
}
您可以通过设置更高的minTime或minDistance来节省电池电量。我相信心灵距离应该更适合你。例如,如果你只想每10米更新一次位置,你可以这样称呼它

locationManager.requestLocationUpdates(locationManager.GPS\u提供者,5000,10,this)

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

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


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

这个链接对你有用吗

使用服务收听位置(LocationListener)

新的google play是目前为止最好的方式。 融合位置API考虑了所有位置提供者和您所需的位置准确性,为您的应用程序提供最佳位置

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


当然,这需要用户拥有Google Play应用程序的更新版本,但这不应该是一个太大的问题。

服务是必需的,因为即使应用程序没有在后台运行,我也应该能够获取位置。我相信requestLocationUpdates会启动服务,所以我认为您不需要为此启动自己的服务。您的问题是RequestLocationUpdate在短时间后停止发送位置?我理解正确吗?那么我相信我发布的解决方案是正确的。至少我正在我的应用程序中使用它,而且它的行为与你想要的完全相同。@horin:如果你的应用程序被杀死,它将停止跟踪。使用一项服务可以确保它始终跟踪非谷歌授权设备的实际问题。KindleFires没有Google Play,也没有定制ROM或许多亚洲小型OEM。当然,除非他们盗版。在这种情况下,当且仅当google play服务不可用时,默认为androids location manager。