【问题标题】:App permissions on Android Marshmallow in PhoneGapPhoneGap 中 Android Marshmallow 的应用权限
【发布时间】:2016-03-11 02:17:23
【问题描述】:

在 Android Marshmallow 中,我们需要在应用程序中分别授予对位置、文件等的访问权限。 PhoneGap 应用程序中是否有任何 wan 可以检查权限是否可用并提示用户提供权限。

【问题讨论】:

    标签: android file cordova permissions location


    【解决方案1】:

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

    【讨论】:

    • 你是对的,但不是从github添加插件,正如你所说,它将安装-dev版本,他应该安装使用cordova plugin add cordova-plugin-file@4.0.0 --save发布的最新版本
    • 上述方法总是返回“GRANTED”。但是,我仍然不允许获取位置数据。当我检查应用权限时,它仍然没有获得位置权限。
    • @VipulAggarwal 请参阅此example project,了解如何实现此功能的工作示例
    【解决方案2】:

    可以使用以下 Cordova 插件明确要求用户启用特定权限:https://www.npmjs.com/package/cordova-plugin-android-permissions

    特别是对于较旧的插件,这可能非常有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      • 2016-11-09
      • 2016-02-20
      • 2016-02-29
      相关资源
      最近更新 更多