在Android Marshmallow中,我们需要在Apps中分别授予对Location,File等的访问权限。 在PhoneGap应用程序中是否有任何我可以检查的权限是否可用,并提示用户提供权限。
答案 0 :(得分:9)
更新2016年2月16日
Phonegap立即构建supports API 23 - hoooray!
或者如果您在本地构建,只需要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 repos的主分支安装“前沿”版本,而不是通过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:
使用发行版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);
答案 1 :(得分:2)
可以明确要求用户使用以下Cordova插件启用特定权限:https://www.npmjs.com/package/cordova-plugin-android-permissions
特别是对于较旧的插件,这可能非常有用。