Cordova 应用程序“Android 权限 Cordova 插件”未显示权限对话框

To *_* Be 5 permissions cordova cordova-plugins android-6.0-marshmallow

我正在为我的cordova 应用程序使用“imagepicker”插件,以便从移动图库中获取图像并使用它们。我正在 android 6.0 设备上测试我的应用程序,这就是问题所在,marshmallow Android 6.0 需要运行时许可,不像旧版本“它正在处理旧版本”,而是在 api 23 或更高版本上打开图库它立即关闭,应用程序崩溃。当我搜索时,我发现我需要获得许可才能这样做。所以我开始使用“Android 权限 Cordova 插件”并通过复制他们在此页面中提供的示例:https : //www.npmjs.com/package/cordova-plugin-android-permissions

这是:

var permissions = cordova.plugins.permissions;
permissions.hasPermission(permissions.CAMERA, checkPermissionCallback, null);

function checkPermissionCallback(status) {
  if(!status.hasPermission) {
    var errorCallback = function() {
      console.warn('Camera permission is not turned on');
    }

    permissions.requestPermission(
      permissions.CAMERA,
      function(status) {
        if(!status.hasPermission) errorCallback();
      },
      errorCallback);
  }
}
Run Code Online (Sandbox Code Playgroud)

控制台总是说:'相机权限未打开'并且没有显示权限对话框。

然后我再次搜索并找到了这个已解决的问题和答案,所以我安装了“cordova-plugin-diagnostic”并尝试了以下代码:

function requestPermission(){
    cordova.plugins.diagnostic.requestRuntimePermission(function(status){
        switch(status){
            case cordova.plugins.diagnostic.runtimePermissionStatus.GRANTED:
                console.log("Permission granted (or already granted) - call the plugin");
                // call SQLite plugin
                break;
            case cordova.plugins.diagnostic.runtimePermissionStatus.DENIED:
                console.log("Permission denied - ask again");
                alert("Come on user, we really need this. I'll ask again...");
                requestPermission();
                break;
            case cordova.plugins.diagnostic.runtimePermissionStatus.DENIED_ALWAYS:
                console.log("Permission permanently denied");
                alert("Well that's it, we're dead Jim");
                navigator.app.exitApp();
                break;
        }
    }, function(error){
        console.error("The following error occurred: "+error);
    }, cordova.plugins.diagnostic.runtimePermission.READ_PHONE_STATE);
}
requestPermission();
Run Code Online (Sandbox Code Playgroud)

应用程序关闭,也没有显示任何对话框,我想我不知道这个插件应该做什么以及我如何获得打开画廊的权限。如果有人能给我完整的例子来打开画廊并在允许的情况下选择图像,那将是很大的帮助。

对不起我的英语,感谢你的耐心。

Nei*_*ell 0

我不熟悉您使用的插件,但我能够将cordova-plugin-settings-hook与我的 config.xml 中的此类条目一起使用来解决类似的问题:

<platform name="android"> <config-file parent="/*" platform="android" target="AndroidManifest.xml"> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

要在 config.xml 中使用上述设置,您还需要编辑属性widget以包含附加属性:xmlns:android="http://schemas.android.com/apk/res/android"