首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当设备进入睡眠状态时,位置管理器是否继续工作?

当设备进入睡眠状态时,位置管理器是否继续工作?
EN

Stack Overflow用户
提问于 2012-08-21 22:18:04
回答 2查看 8.3K关注 0票数 4

当布尔标志设置为true时,我的应用程序请求在后台更新服务。如果标志设置为true,那么我将获得一个PARTIAL_WAKE_LOCK来让我的后台服务运行。我的问题是:

  • 因为我向位置管理器请求更新(我不手动请求更新,而是订阅了locationManager.requestLocationUpdates ).locationManager是否继续正常工作/正常工作,即使设备与PARTIAL_WAKE_LOCK一起进入睡眠状态?
  • 我读过,有一个WifiLock -> WIFI_MODE_SCAN_ONLY,我没有得到。既然位置管理器使用wifi扫描来通过wifi热点检测位置,那么我也应该获得这个吗?
  • 当设备进入睡眠状态时,gps位置更新如何?
EN

回答 2

Stack Overflow用户

发布于 2012-08-22 01:37:24

  1. 不,不需要。更多(非常好的)信息这里,包括可能的解决方案/黑客。
  2. 关于第一件事,我得做个有教养的猜测,说这不会有什么区别
  3. 据我所知,您所使用的更新提供者LocationManager.NETWORK_PROVIDERLocationManager.GPS_PROVIDER并没有什么区别。

在有点OQ的危险中,我有点好奇哪种应用程序需要唤醒锁才能让服务运行。据我所知,拥有一个唤醒锁并不能确保您的Service继续运行。确保Service持续运行的唯一方法是让它处于前台(Service.startForeground())。否则,系统仍然可能会关闭服务,不管它是否需要唤醒锁。也就是说,如果它正在运行,它可以使用Handler或其他什么工具来完成它的工作。

如果您正在使用这种方法,并且我认为您是基于这种情况,我建议您不要这样做。基本上,您正在创建一个服务,让它在前台运行(猜测),并且您正在查询一个唤醒锁,以便在屏幕关闭时请求位置更新。这似乎有点过火了。

有一种更有效的方法,它比Handler.postAtTimeHandler.postDelayedAlarmManager.setRepeating()的时间更准确。将类型设置为ELAPSED_REALTIME_WAKEUP或RTC_WAKEUP,以便在设备休眠时运行,然后当必须创建的BroadcastReceiver触发并接收警报事件时,您可以请求更新并处理其他事件。

如果您不使用Handler,而只是请求位置更新,这种方法可能会更好,因为它不需要您拥有一个运行的Service或获取一个唤醒锁。

看来LocationManager.addProximityAlert()就是这里的去处。这也有缺陷(见1)

顺便提一下,这里有类似的问题:Android:当手机处于睡眠状态时GPS定位更新?

票数 5
EN

Stack Overflow用户

发布于 2016-08-24 13:27:51

我花了几天的时间试图在Nexus 6上使用Android6.0锁定屏幕,尝试获取WiFi和基于单元格的位置,而且看起来本地的安卓定位服务--简单--不允许这样做。一旦设备被锁定,它仍然收集10-15分钟的位置更新事件,然后停止提供任何位置更新。

在我的例子中,解决方案是从本地Android位置服务切换到名为com.google.android.gms.location:https://developers.google.com/android/reference/com/google/android/gms/location/package-summary的Google服务包装器。

是的,我知道有些Android设备缺乏GMS,但是对于我的应用程序来说,这是唯一的解决方案。

即使在后台和设备屏幕被锁定时,它也不会停止发送位置更新。

我个人更喜欢RxJava库将此服务封装到流中(包括示例):https://github.com/mcharmas/Android-ReactiveLocation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12063870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档