Cordova App'Android权限Cordova插件'未显示权限对话框

问题描述 投票:4回答:6

我正在参加我的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);
  }
}

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

然后我再次搜索,发现这个问题解决了,所以我安装了'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();

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

对不起我的英语,感谢您的耐心等待。

cordova permissions cordova-plugins android-6.0-marshmallow
6个回答
2
投票

通过向platforms / android / AndroidManifest.xml添加相关权限和功能,我能够获得要显示的权限请求。

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" android:required="true" />

1
投票

亲爱的,我有同样的问题。请求对话框没有出现。在我的代码集中注意力之后,我发现,var权限= cordova.plugins.permissions是在DeviceReady()函数中定义的,另一方面我调用checkPermissionCallback()作为回调函数,它不在DeviceReady()函数中,所以在该函数中未定义var权限(范围不同)。所以必须在DeviceReady()函数中定义checkPermissionCallback。


1
投票

在config.xml文件中,尝试添加

enter image description here

然后构建应用程序。它将自动覆盖平台文件夹中的AndroidManifest.xml文件,因此带有deny和allow按钮的弹出对话框可以正常工作。

请参阅以下链接以获取更多参考。

https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en


0
投票

我不熟悉您使用的插件,但我能够在我的config.xml中使用cordova-plugin-settings-hook和这些条目来解决类似的问题:

<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"


0
投票

在cordova config.xml中将android目标版本设置为api 23之后

<preference name="android-targetSdkVersion" value="23" />
<preference name="android-minSdkVersion" value="19" />

你可以继续在android / androidManifest.xml文件中指出所需的权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" android:required="true" /> 

使用此设置,您可以使用任何用于cordova的android权限插件,例如https://www.npmjs.com/package/cordova-plugin-android-permissions

根据您想要实现的目标,这可以解决您的大部分或全部问题


0
投票

就在昨天我发现了同样的问题,并开始查看npm的文档(我留下链接:https://www.npmjs.com/package/cordova-plugin-permission),但它适合我找到解决方案的需要。

        var permissions = plugins.Permission;

        permissions.has('android.permission.CAMERA', function (status) {
          if(!status.has) {
            var errorCallback = function() {
              console.warn('Camera permission is not turned on');
            }

            permissions.request(
              'android.permission.CAMERA',
              function(status) {
                if(!status.has) errorCallback();
              },
              errorCallback);
          }
        }, alert);
© www.soinside.com 2019 - 2024. All rights reserved.