Android - 当使用LocationManager.requestLocationUpdates时,我需要一个WakeLock吗?

13

我的应用程序定期使用闹钟检查位置,使用一个 BroastcastReceiver 启动服务。 我知道在启动服务之前应该获取唤醒锁,但是我的问题是什么时候可以释放它?

如果在调用 requestLocationUpdates 之后释放唤醒锁,设备可以进入睡眠状态并且不调用我的 LocationListener 吗?还是设备总是会唤醒以传送更新,并保持唤醒状态直到回调返回?我不愿意保持唤醒锁,因为这会阻止设备在更新之间休眠,直到我完成位置操作。


你可以看一下[CommonsGuy的WakefulService][1],根据文档所述,它可以为你处理部分唤醒锁的问题。 [1]:http://github.com/commonsguy/cwac-wakeful#readme - Christopher Orr
1
问题不是“如何使用WakeLock”,而是“是否需要WakeLock?” - noah
1
调用requestLocationUpdates时,是否需要使用WakeLock以确保在可用时接收更新? - noah
1
我相信你只需要在Service启动并调用requestLocationUpdates之前持有一个wakelock。此时,服务正在运行并可以接收位置更新;wakelock可以被释放,onReceive方法将已完成,设备可能会回到睡眠状态。 - Christopher Orr
2
我认为在设备休眠时有许多位置更新的用例,例如记录旅程的GPS轨迹。 - Christopher Orr
显示剩余2条评论
2个回答

2
根据我的经验(并在这里的评论中得到确认),在调用requestLocationUpdates后释放唤醒锁似乎不是问题。不幸的是,获得明确答案的唯一方法是询问平台开发人员,但我没有收到回复

2
这是正确的。虽然我不是一个平台开发者,但我有一个工作正常的GPS跟踪应用程序,在设备“睡眠”的情况下能够正常运行... 基本上,每个后续位置更新都附带自己的WakeLock,允许您接收Intent。在接收器中,如果您想处理该事件,您需要获取(并稍后释放)自己的WakeLock。 - Richard Le Mesurier
@RichardLe:这正是我所想的-在等待接收器时似乎不需要持有锁,但在请求更新时我会持有锁(我使用FLAG_ONE_SHOT在挂起意图中模拟requestSingleUpdate并使用闹钟管理器请求更新-尚未尝试完全依赖于minTime)。 - Mr_and_Mrs_D
@RichardLeMesurier:我终于可以自己确认了-一旦注册更新,接收器就会定期触发-我猜onReceive()运行时唤醒锁是有效的。 - Mr_and_Mrs_D
@Mr_and_Mrs_D 哇,很高兴有人确认了这个。感谢您跟进此帖子。祝愿你的定位应用程序好运。 - Richard Le Mesurier
@RichardLeMesurier:真正好的情况是得到开发者的确认 - 也许再去烦他们一点?- 应用程序在这里,我禁用了曾经叫醒我的闹钟管理器的提交在这里。我只检查了_网络提供商_ - 但我相信GPS不会有所不同。请原谅混乱 - 这是一个压缩树,而且它还处于预阿尔法状态。顺便说一下,我留下了闹钟 - 最小时间报告不可靠。 - Mr_and_Mrs_D
显示剩余2条评论

0

在 Android 系统设置中检查省电模式:必须将其关闭以允许位置管理器在屏幕关闭时生成更新的位置;经过在三星 A5 上的测试,我花了两天时间才找到这个解决方案 :-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接