我想要完成的任务:
如果用户的位置服务阻止我默认获取他/她手机的位置,我想要求16-25之间的每个API的位置许可(Android 4.1.2-7.1.1)
因为在iOS上我没有遇到这个问题我想专注于android。
我已尝试过的内容:
<uses-permission android:name="android.premission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.premission.ACCESS_FINE_LOCATION" />
上面提到的插件总是以hasPermission: true
返回,即使在设备上拒绝访问位置,因此它对我不起作用。
我还没有尝试过:
诊断插件说明我已经在我的理解中选择API 23及以上或API 22及以下。 (<preference name="android-targetSdkVersion" value="22"/>
是最低目标版本。)但我不知道它是否仍适用于较低的API版本。
我的设置:
答案 0 :(得分:10)
诊断插件说明我已经在我的理解中选择API 23及以上或API 22及以下。 (是最低目标版本。)但我不知道它是否仍适用于较低的API版本。
cordova-diagnostic-plugin API级别要求基于用于构建的SDK版本,而不是目标设备上运行的API版本。 因此,使用SDK for API 23(Android 6.0)构建的应用程序仍然适用于运行旧版Android的设备。
您需要将构建目标设置为API 23(或更高版本),以使用插件的主要版本(fromEmitter(f, NONE).subscribeOn().onBackpressureLatest().observeOn()
而非cordova.plugins.diagnostic
)进行构建,因为它包含运行时权限代码这需要API 23 +的构建环境。
如果用户的位置服务阻止我默认获取他/她手机的位置,我想询问16-25之间的每个API的位置许可(Android 4.1.2-7.1.1)
这有两个不同的方面:
请求16-25(Android 4.1.2-7.1.1)
之间的每个API的位置权限
Android 23运行时权限在API 23(Android 6.0)中引入
您可以使用isLocationAuthorized()检查该应用是否具有位置授权。 在运行Android 5(API 22)或更低版本的设备上调用它将始终返回TRUE,因为已在安装时授予权限。
您可以请求运行时权限以使用requestLocationAuthorization()的位置。 在运行Android 5(API 22)或更低版本的设备上调用它将无效,因为在安装时已授予权限。
定位服务阻止我获取他/她手机的位置
您可以使用isLocationEnabled()检查用户是否已关闭位置。
如果位置已关闭,您可以使用switchToLocationSettings()打开设备位置设置页面以允许用户启用位置服务,或者您可以使用cordova-plugin-request-location-accuracy请求所需的位置准确度,而无需用户在位置设置页面上手动执行此操作。
免责声明:我是cordova-diagnostic-plugin和cordova-plugin-request-location-accuracy的作者。