Android将我们的位置列入黑名单

时间:2015-02-18 18:45:44

标签: android gps

我们在应用程序中创建了一个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的位置数据,但我不知道为什么。

我搜索了一下,没有发现任何内容,希望得到一些帮助。

2 个答案:

答案 0 :(得分:0)

您应该将手机插入IDE并重新启动,同时观察可能导致禁止位置的任何更改。我认为可能的原因是您的设备标识符需要一些时间来注册手机天线,这就是导致重启暂时出现以解决问题的原因。

答案 1 :(得分:0)

位置黑名单和白名单分别存储在Settings.SecurelocationPackagePrefixBlacklistlocationPackagePrefixWhitelist中。这些值包含逗号分隔的包名称前缀。 LocationBlacklist.isBlackListed()首先检查黑名单中的匹配项,然后检查白名单中是否有异常。 LocationBlacklist注册ContentObserver,因此对设置值的任何更改都会立即生效。

从Android 5.1开始,getLastLocation()handleLocationChangedLocked()的{​​{1}}以及LocationManagerService的{​​{1}}会查看这些列表。如果应用程序的前缀或全名被列入黑名单,这些只会返回null或以静默方式退出。所有其他位置API都不受影响。

由于您正在观察黑名单中的运行时更改,因此系统进程必须在引导后的某个时间向updateFences()值添加GeofenceManager。如果您无法识别,那么可能通过sqlite3命令行手动更改值会恢复您应用的更新。它可能会在某些时候发生变化,但识别罪魁祸首可能比每次都要等待重启更容易。您也可以尝试将com.google添加到白名单例外。

就问题的根本原因而言,我的猜测是黑名单是由您设备上的部分Gapps完成的。也许它认为它在模拟器或VM中运行?你在运行自定义ROM吗?