我有一个应用程序安装在出租车司机的电话中,用于跟踪出租车行驶的位置和距离。(手机已root,我们拥有手机的所有权限)。在我们应用程序的第一个实现中,我们使用 LocationManager.requestLocationUpdates 从 GPS 和网络提供商获取位置更新。由于我们需要捕捉出租车行驶的每一公里,我们在位置设置中启用了“高精度”模式。
出于两个原因,我们愿意迁移到 Fused-location-provider
- 出于某种原因(android 中的一个已知错误:https ://code.google.com/p/android/issues/detail?id= 57707)NETWORK_PROVIDER 不提供位置更新。
- 由于某种原因,设备突然失去 GPS 定位,并且在设备重新启动之前不会再次获得。
我们观察到 FusedLocationProvider 提供了更好的结果,并计划更改我们的应用程序以使用 FusedLocationProvider。现在的问题是 - 我们的设备有一个旧版本的 GooglePlayServices,它没有 LocationServices。我们有两个选择是
使用 LocationRequest 和 LocationClient 使用旧版本的 FusedLocationProvider。尽管它在户外提供了良好的结果(这是我们的主要要求),但即使启用了 wifi 并且网络信号良好(这似乎也是一个已知问题(位置更新),我们也没有在室内获得位置更新(根本没有)Fusion Location Provider APIs 声称不能在室内工作)。因此,我怀疑旧版本的 GooglePlayServices 和/或 FusedLocationProvider 中可能存在一些错误,这些错误将在以后的版本中得到修复。
更新所有手机上的 GooglePlayServices(通过无线安装 apk)并优先使用 LocationServices 获取高精度的位置更新。这种实现甚至在室内也能提供位置更新,这是我们所期望的——这里的问题是,当我在应用程序中请求位置更新时,我用 apk 更新 GooglePlayServices 时,它会打开 2 个弹出窗口,一个要求确认以提高位置准确性,另一个是打开谷歌应用程序使用我的位置的能力。即使我不接受第二个弹出窗口,它也可以正常工作,但如果我不接受第一个弹出窗口,它会将位置设置更改为“仅设备”模式(这意味着仅使用 GPS 提供程序)。
我们不能指望我们所有的驱动程序在弹出窗口显示时都接受它。我想知道是否有任何方法可以为第一个弹出窗口执行“默认接受”之类的操作,以便我的设备保持“高精度”模式。
我找到了一种禁用位置同意的解决方案,该解决方案是在位置设置中手动启用高精度模式时出现的。该解决方案适用于我们的旧应用程序,但更新后的 GooglePlayServices 无法正常工作。
任何实现这一点的方法——比如在设备外壳中执行命令、发出意图或修改 GooglePlayServices apk 本身对我来说都很好。