离子android要求位置许可

时间:2016-10-20 08:33:26

标签: android cordova ionic-framework cordova-plugins android-permissions

我想要完成的任务:
如果用户的位置服务阻止我默认获取他/她手机的位置,我想要求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" />
  • cordova-plugin-android-premissions

上面提到的插件总是以hasPermission: true返回,即使在设备上拒绝访问位置,因此它对我不起作用。

我还没有尝试过:

诊断插件说明我已经在我的理解中选择API 23及以上或API 22及以下。 (<preference name="android-targetSdkVersion" value="22"/>是最低目标版本。)但我不知道它是否仍适用于较低的API版本。

我的设置:

  • Cordova CLI:6.2.0
  • Gulp CLI&amp;当地:3.9.1
  • Ionic Framework:1.3.1
  • Ionic CLI:1.7.16
  • 节点:4.2.2
  • 设备android:5.0.1
  • 所需的构建目标:16
  • 当前构建目标:22

1 个答案:

答案 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-plugincordova-plugin-request-location-accuracy的作者。