Android Marshmallow中PhoneGap应用的权限

9
在Android Marshmallow中,我们需要在应用程序中单独授予位置、文件等访问权限。在PhoneGap应用程序中,是否有一种方法可以检查权限是否可用,并提示用户提供权限?
2个回答

9

更新 2016年02月16日

Phonegap Build现在支持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 repos的master分支安装“ bleeding edge”版本,而不是通过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来请求相应核心插件在尝试使用核心插件API之前需要的Android运行时权限。

例如,要使用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
你说得大部分正确,但是他不应该从Github添加插件,因为那样会安装-dev版本。他应该使用cordova plugin add cordova-plugin-file@4.0.0 --save命令来安装最新版本的插件。 - jcesarmobile
上述方法总是返回“GRANTED”给我。然而,我仍然无法获取位置数据。当我检查应用程序权限时,它仍然没有获得位置权限。 - Vipul Aggarwal
@VipulAggarwal 请查看此示例项目,以了解如何实现此功能的工作示例。 - DaveAlden

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接