PhoneGap中Android Marshmallow的应用权限

前端之家收集整理的这篇文章主要介绍了PhoneGap中Android Marshmallow的应用权限前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Android Marshmallow中,我们需要在Apps中分别访问Location,File等.
PhoneGap应用中有没有任何可以检查的权限是否可用,并提示用户提供权限.

解决方法

更新16/02/2016

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之前.

例如,要使用位置插件,请通过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);

猜你在找的Android相关文章