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);

相关文章

以下为个人理解,如错请评 CE: 凭据加密 (CE) 存储空间, 实际路径/data/user_ce/ DE: 设备加密 (DE) 存...
转载来源:https://blog.csdn.net/yfbdxz/article/details/114702144 用EventLog.writeEvent打的日志(或...
事件分发机制详解 一、基础知识介绍 1、经常用的事件有:MotionEvent.ACTION_DOWN,MotionEvent.ACTION...
又是好久没有写博客了,一直都比较忙,最近终于有时间沉淀和整理一下最近学到和解决的一些问题。 最近进...
Android性能优化——之控件的优化 前面讲了图像的优化,接下来分享一下控件的性能优化,这里主要是面向...
android的开源库是用来在android上显示gif图片的。我在网上查了一下,大家说这个框架写的不错,加载大的...