当布尔标志设置为true时,我的应用程序请求在后台更新服务。如果标志设置为true,那么我将获得一个PARTIAL_WAKE_LOCK来让我的后台服务运行。我的问题是:
locationManager.requestLocationUpdates ).locationManager是否继续正常工作/正常工作,即使设备与PARTIAL_WAKE_LOCK一起进入睡眠状态?WifiLock -> WIFI_MODE_SCAN_ONLY,我没有得到。既然位置管理器使用wifi扫描来通过wifi热点检测位置,那么我也应该获得这个吗?发布于 2012-08-22 01:37:24
LocationManager.NETWORK_PROVIDER或LocationManager.GPS_PROVIDER并没有什么区别。在有点OQ的危险中,我有点好奇哪种应用程序需要唤醒锁才能让服务运行。据我所知,拥有一个唤醒锁并不能确保您的Service继续运行。确保Service持续运行的唯一方法是让它处于前台(Service.startForeground())。否则,系统仍然可能会关闭服务,不管它是否需要唤醒锁。也就是说,如果它正在运行,它可以使用Handler或其他什么工具来完成它的工作。
如果您正在使用这种方法,并且我认为您是基于这种情况,我建议您不要这样做。基本上,您正在创建一个服务,让它在前台运行(猜测),并且您正在查询一个唤醒锁,以便在屏幕关闭时请求位置更新。这似乎有点过火了。
有一种更有效的方法,它比Handler.postAtTime或Handler.postDelayed:AlarmManager.setRepeating()的时间更准确。将类型设置为ELAPSED_REALTIME_WAKEUP或RTC_WAKEUP,以便在设备休眠时运行,然后当必须创建的BroadcastReceiver触发并接收警报事件时,您可以请求更新并处理其他事件。
如果您不使用Handler,而只是请求位置更新,这种方法可能会更好,因为它不需要您拥有一个运行的Service或获取一个唤醒锁。
看来LocationManager.addProximityAlert()就是这里的去处。这也有缺陷(见1)
顺便提一下,这里有类似的问题:Android:当手机处于睡眠状态时GPS定位更新?
发布于 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
https://stackoverflow.com/questions/12063870
复制相似问题