我正在参加我的cordova应用程序使用'imagepicker'插件来从移动图库中获取图像并使用它们 . 我在Android 6.0设备上测试我的应用程序,这是问题,marshmallow Android 6.0在运行时权限要求不像旧版本"it is working on older versions",但在api 23或更高时,当它参加打开图库它立即关闭,应用程序崩溃 . 当我搜索我发现我需要许可才能做到这一点 . 所以我开始使用"Android permission Cordova plugin"并复制他们在此页面中显示的示例: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();
应用程序关闭,没有对话框显示,我想我不能得到这个插件应该做什么以及如何获得打开图库的权限 . 如果有人可以给我一个完整的例子来打开画廊并在获得许可的情况下选择图像,那将是很有帮助的 .
对不起我的英语,感谢您的耐心等待 .
5 回答
我不熟悉您使用的插件,但我能够在我的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"
.通过向platforms / android / AndroidManifest.xml添加相关权限和功能,我能够获得要显示的权限请求 .
亲爱的,我有同样的问题 . 请求对话框没有出现 . 在我的代码集中注意力之后,我发现,var权限= cordova.plugins.permissions是在DeviceReady()函数中定义的,另一方面我调用checkPermissionCallback()作为回调函数,它不在DeviceReady()函数中,所以在该函数中未定义var权限(范围不同) . 所以必须在DeviceReady()函数中定义checkPermissionCallback .
在config.xml文件中,尝试添加
然后构建应用程序 . 它将自动覆盖平台文件夹中的AndroidManifest.xml文件,因此带有deny和allow按钮的弹出对话框可以正常工作 .
Kindly see the below link for more reference.
https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en
在cordova config.xml中将android目标版本设置为api 23之后
你可以继续在android / androidManifest.xml文件中指出所需的权限
使用此设置,您可以使用任何用于cordova的android权限插件,例如https://www.npmjs.com/package/cordova-plugin-android-permissions
根据您想要实现的目标,这可以解决您的大部分或全部问题