1

我正在为我的科尔多瓦应用程序使用'imagepicker'插件从移动画廊获取图像并使用它们。我正在测试我的应用程序在Android 6.0设备,这是问题,棉花糖Android 6.0需要在运行时权限不像旧版本“它正在旧版本”,但在API 23或更高时,它参加开放画廊它立即关闭,应用程序崩溃。当我搜索时发现我需要许可才能做到这一点。所以我就开始使用“Android的权限科尔多瓦插件”,并通过复制他们在这个页面提供的示例:https://www.npmjs.com/package/cordova-plugin-android-permissions科尔多瓦应用程序'Android权限科尔多瓦插件'没有显示权限对话框

是:

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

控制台总是说:“摄像头权限未打开”并没有权限对话框显示。

然后我再次搜查,发现该解决的问题,它`答案,所以我安装了“科尔多瓦 - 插件诊断”,并试图将此代码:

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

应用程序关闭,没有对话也表示,我想我不能得到这个插件应该做什么,我如何获得打开图库的权限。如果有人能给我完整的例子打开画廊,并选择权限的形象,这将是很大的帮助。

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

+0

试试这个,可能是工作stackoverflow.com/a/41221852/5488468 –

+0

你尝试完全卸载你的应用程序并重新安装?这可能会清除以前被拒绝的权限,并为您提供全新的开始。 – Alex

回答

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"

+0

问题是,android 6.0需要运行时权限,所以我如何在运行时请求使用JavaScript的权限。 –

+0

您应该可以使用图像选择器插件,而无需使用JavaScript明确请求许可。基于上面所示的方法,许可请求将在第一次使用时自动发生一次。您仍然需要将通用错误处理添加到图像选择器代码,以处理用户是否拒绝了请求。你回来的错误信息应该表明这一点。 –

0

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

0

我能够通过向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" />