API 28 位置模式与新的二进制 Google 精度设置不正确
Posted
技术标签:
【中文标题】API 28 位置模式与新的二进制 Google 精度设置不正确【英文标题】:API 28 Location Mode is incorrect with new binary Google Accuracy Setting 【发布时间】:2019-07-08 17:38:30 【问题描述】:我目前正在开发一个要求用户在其设备上启用高精度的应用程序。我已将应用程序编程为使用 android 弹出窗口和设置 API 来询问和解决此问题。
首先检查用户的位置模式是否正确,我使用:
retVal = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE) == Settings.Secure.LOCATION_MODE_HIGH_ACCURACY;
此检查似乎适用于 API 级别 27 及以下。
但是,使用 API 28 中引入的新二进制 Google 精度设置,我遇到了问题。如果我关闭了准确性并使用应用程序中的弹出窗口打开准确性设置。即使现在启用了高精度,Settings.Secure.LOCATION_MODE
也会返回错误的值。仅当用户从 Android 中的“设置”应用手动更改此设置时,LOCATION_MODE
才会返回正确的值。
我想知道是否有新的 API 可以在 API 28 中准确返回 LOCATION_MODE
?
【问题讨论】:
【参考方案1】:根据Settings.Secure.LOCATION_MODE
docs:
此常量在 API 级别 28 中已弃用。 要检查位置状态,请使用 LocationManager.isLocationEnabled()。要获取位置提供者的状态,请使用 LocationManager.isProviderEnabled(String)。
所以我相信您可以通过以下方式获得所需的信息:
retVal = LocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
&& LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
【讨论】:
非常感谢您的回复,尝试此检查后,似乎对上述问题没有任何影响。 1)检查提供者,如果其中一个被禁用,请用户提高准确性。 2) 用户获得谷歌弹出窗口以提高 gps 3) 用户点击是 4) 准确性现已开启 5) 操作系统仍将其中一个提供程序返回为关闭,因此 retval 继续保持错误 一旦用户响应了谷歌 GPS 弹出窗口,我需要 retval 翻转到正确的状态。旧标志 LOCATION_MODE 用于准确执行此操作,直到 API 27。但是对于 android P,除非用户从设置应用程序手动执行此操作,否则从应用程序内更改精度设置总是会从操作系统返回陈旧的 GPS 精度状态,包括是否提供程序是否启用。以上是关于API 28 位置模式与新的二进制 Google 精度设置不正确的主要内容,如果未能解决你的问题,请参考以下文章
YouTube Android Player API 在解组时抛出“BadParcelableException ClassNotFoundException:asc”与新的 YouTube 版本
将 Firebase 身份验证与新的 @App 协议一起使用
使用 Google Play 服务我可以在离线模式下获取最新位置吗(FusedLocationProvider Api)