2017-02-14 47 views
0

我实现了使用FusedLocationProviderApi获取位置更新。 我需要在应用程序未运行时在后台跟踪设备位置。测试位置服务时遇到问题。我不能让他们不工作

我跟着教程,我有一个服务,我打电话requestLocationUpdates意图启动一项服务。

我故意没有实现保持唤醒锁只是为了测试并看到当屏幕熄灭时,设备停止获取位置更新。一旦我证实我可以继续实施唤醒锁定,并期待相反的结果,即看到它的工作。

我使用了两款设备:带有KitKat的Google Nexus 10和带有棒棒糖的三星Galaxy A5(2016)。

在这两个设备上,它都会不断发送更新(我正在向网站发送更新)。 我在屏幕上离开设备一分钟后,再在房子周围走动,进行了屏幕测试。

我知道的Android 6和打盹模式是更严格的,但我想钉,并了解它是如何工作在Android 4.4和Android 5.

这么折腾!任何想法如何真正让设备进入睡眠模式,所以我可以看到获取位置更新停止工作?

滑稽,一切我读过约为使其工作:)

编辑:我很困惑,为什么越来越位置更新仍然是工作时屏幕是关闭的,即使一个积极的位置更新设置的一样以下:

locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
locationRequest.setFastestInterval(2); 
locationRequest.setInterval(1000); 
+0

只要服务正在运行,您将不断获取位置更新 – tyczj

+0

@tyczj谢谢,但这有什么帮助?你能分享更多的想法吗? –

+0

那么我得到的是你需要让你的服务停止或者由操作系统停止它,或者你手动去停止服务,唤醒锁或不会有所作为。 – tyczj

回答

2

件事请求位置更新是下面这一切,在LocationManagerService,这是什么LocationManager用途,实际上创建并获得它自己的唤醒锁定。所以从技术上讲,只要您有位置监听者注册以主动接收GPS,您的设备就永远不会进入睡眠状态。现在,我知道您使用的是Google的FusedLocationApi,但在其下面,它确实使用了LocationManager。如果您有兴趣更好地了解位置代码,请在此处输入LocationManagerService的源代码。

+0

谢谢。当你说“技术上,只要你有一个位置监听者注册来主动接收GPS,你的设备就永远不会进入睡眠状态”。不确定,但是不是设备会睡觉并唤醒自己执行我在'requestLocationUpdate'中提供的'Intent'? –

+1

它确实看起来也使用了AlarmManager,因此如果将间隔设置为大于0,它会在GPS关闭后释放唤醒锁,以让设备进入睡眠状态。 –

+0

由于它使用唤醒锁,这是否意味着在Android 6+打盹模式位置更新不发送?因为在打盹模式下,唤醒锁被忽略。除非应用程序是打盹模式白名单....多么混乱 –

相关问题