【发布时间】:2016-03-11 02:17:23
【问题描述】:
在 Android Marshmallow 中,我们需要在应用程序中分别授予对位置、文件等的访问权限。 PhoneGap 应用程序中是否有任何 wan 可以检查权限是否可用并提示用户提供权限。
【问题讨论】:
标签: android file cordova permissions location
在 Android Marshmallow 中,我们需要在应用程序中分别授予对位置、文件等的访问权限。 PhoneGap 应用程序中是否有任何 wan 可以检查权限是否可用并提示用户提供权限。
【问题讨论】:
标签: android file cordova permissions location
2016 年 2 月 16 日更新
Phonegap 立即构建 supports API 23 - 万岁!
或者,如果您在本地构建,只需 Cordova/Phonegap CLI 6+,您将默认获得 cordova-android@5+ 平台。
原始答案
目前,这当然可以使用 Cordova/Phonegap CLI,但 Phonegap Build 还不支持 API 23(Android 6.0 / Marshmallow)。
首先需要使用Android平台v5.0.0(或以上),使用API 23。
截至今日,默认版本为4.1.1(使用API 22),所以添加平台时需要明确指定版本:
cordova platform add android@5.0.0
phonegap platform add android@5.0.0
核心插件本身正在升级以支持请求适当的 Android 6 运行时权限。因此,您需要直接从 GitHub 存储库的主分支安装“前沿”版本,而不是通过 npm 插件注册表。例如,使用:
cordova plugin add https://github.com/apache/cordova-plugin-file
这应该让您获得 4.0.1-dev 版本。
不是 npm 发布版本:
cordova plugin add cordova-plugin-file
这将为您提供 v3.0.0
请注意,主分支上的版本不是发行版,因此可能包含错误。
所以替代方案(我已选择)是继续使用插件的发布版本(尚不支持请求 Android 运行时权限),但使用 cordova-diagnostic-plugin 请求 Android 运行时权限在尝试使用核心插件 API 之前,需要相应的核心插件。
例如要使用Location插件,通过npm继续使用release版本:
cordova plugin add cordova-plugin-geolocation
但在请求位置之前,请确保已使用诊断插件授予运行时权限:
function requestLocation(){
navigator.geolocation.getCurrentPosition(onSuccess, onError, options);
}
cordova.plugins.diagnostic.getLocationAuthorizationStatus(function(status){
if(status == "GRANTED"){
requestLocation();
}else{
cordova.plugins.diagnostic.requestLocationAuthorization(function(status){
if(status == "GRANTED"){
requestLocation();
}else{
// Handle other cases
}
}, function(error){
console.error(error);
});
}
}, onError);
【讨论】:
cordova plugin add cordova-plugin-file@4.0.0 --save发布的最新版本
可以使用以下 Cordova 插件明确要求用户启用特定权限:https://www.npmjs.com/package/cordova-plugin-android-permissions
特别是对于较旧的插件,这可能非常有用。
【讨论】: