我们在应用程序中创建了一个LocationListener。有时候,手机会进入GPS Gap"并简单地停止报告位置数据。我们已经观看了一段时间,似乎从这个状态移动它的唯一的事情就是重新启动手机。
我把它们连接起来以取消原木并找到了:
02-18 13:35:43.671 703 948 I LocationManagerService: handleLocationChanged for android.uid.system:1000, Provider: passive
02-18 13:35:43.671 703 948 I LocationManagerService: handleLocationChanged for com.google.uid.shared:10040, Provider: passive
02-18 13:35:43.671 703 948 I LocationManagerService: handleLocationChanged for com.google.uid.shared:10040, Provider: passive
02-18 13:35:43.671 703 948 D LocationManagerService: dropping location (blacklisted): com.google.android.apps.maps matches com.google.
查看上面提到的源文件,它只是检查它创建的黑名单,如果它在黑名单中,则显然不会报告该点。
查看代码和上面的代码看起来像是阻止com.google的位置数据,但我不知道为什么。
我搜索了一下,没有发现任何内容,希望得到一些帮助。
答案 0 :(得分:0)
您应该将手机插入IDE并重新启动,同时观察可能导致禁止位置的任何更改。我认为可能的原因是您的设备标识符需要一些时间来注册手机天线,这就是导致重启暂时出现以解决问题的原因。
答案 1 :(得分:0)
位置黑名单和白名单分别存储在Settings.Secure
值locationPackagePrefixBlacklist
和locationPackagePrefixWhitelist
中。这些值包含逗号分隔的包名称前缀。 LocationBlacklist.isBlackListed()
首先检查黑名单中的匹配项,然后检查白名单中是否有异常。 LocationBlacklist
注册ContentObserver
,因此对设置值的任何更改都会立即生效。
从Android 5.1开始,getLastLocation()
和handleLocationChangedLocked()
的{{1}}以及LocationManagerService
的{{1}}会查看这些列表。如果应用程序的前缀或全名被列入黑名单,这些只会返回null或以静默方式退出。所有其他位置API都不受影响。
由于您正在观察黑名单中的运行时更改,因此系统进程必须在引导后的某个时间向updateFences()
值添加GeofenceManager
。如果您无法识别,那么可能通过sqlite3命令行手动更改值会恢复您应用的更新。它可能会在某些时候发生变化,但识别罪魁祸首可能比每次都要等待重启更容易。您也可以尝试将com.google
添加到白名单例外。
就问题的根本原因而言,我的猜测是黑名单是由您设备上的部分Gapps完成的。也许它认为它在模拟器或VM中运行?你在运行自定义ROM吗?