我需要一种在运行时同时请求所有权限的方法。
我正在使用这个插件https://github.com/NeoLSN/cordova-plugin-android-permissions,但是当运行这个应用程序时,它只是随机地请求我三个permission...one中的一个。再次,当我接受READ_PHONE_STATE权限时,需要重新启动read状态的应用程序,特别是输入号码。
守则:
var permissions = cordova.plugins.permissions;
var list = [
permissions.READ_SMS,
permissions.READ_PHONE_STATE,
permissions.PROCESS_OUTGOING_CALLS
];
permissions.hasPermission(list, checkPermissionCallback, null);
function checkPermissionCallback(status) {
if (!status.hasPermission) {
permissions.requestPermission(permissions.READ_PHONE_STATE, function (status) {
if (!status.hasPermission)
error1();
}, error1);
permissions.requestPermission(permissions.READ_SMS, function (status) {
if (!status.hasPermission)
error2();
}, error2);
permissions.requestPermission(permissions.PROCESS_OUTGOING_CALLS, function (status) {
if (!status.hasPermission)
error3();
}, error3);
}
function error1() {
console.warn('STATE permission is not turned on');
}
function error2() {
console.warn('SMS permission is not turned on');
}
function error3() {
console.warn('CALLS permission is not turned on');
}
}
谢谢大家提前!
发布于 2017-05-09 19:19:00
试试Cordova诊断插件。
这个插件有一个requestRuntimePermission()
。来自医生们
requestRuntimePermissions():请求应用程序将获得多个运行时权限的授权。
示例:
cordova.plugins.diagnostic.requestRuntimePermissions(function(statuses){
for (var permission in statuses){
switch(statuses[permission]){
case cordova.plugins.diagnostic.permissionStatus.GRANTED:
console.log("Permission granted to use "+permission);
break;
case cordova.plugins.diagnostic.permissionStatus.NOT_REQUESTED:
console.log("Permission to use "+permission+" has not been requested yet");
break;
case cordova.plugins.diagnostic.permissionStatus.DENIED:
console.log("Permission denied to use "+permission+" - ask again?");
break;
case cordova.plugins.diagnostic.permissionStatus.DENIED_ALWAYS:
console.log("Permission permanently denied to use "+permission+" - guess we won't be using it then!");
break;
}
}
}, function(error){
console.error("The following error occurred: "+error);
},[
cordova.plugins.diagnostic.permission.ACCESS_FINE_LOCATION,
cordova.plugins.diagnostic.permission.ACCESS_COARSE_LOCATION
]);
发布于 2018-11-22 08:10:17
我做了一个解决方案,适用于你要求的cordova插件-android许可。
这些解决方案目前是用AngularJS使用ES5编写的,但可以重写为类型记录或ES6。当您需要一个或多个权限时,调用此允诺函数,当所有权限都已/已经被接受时,它将返回。
var getPermissions = function() {
var defer = $q.defer();
var permissions = cordova.plugins.permissions;
var list = [
permissions.CAMERA,
permissions.RECORD_AUDIO,
permissions.WRITE_EXTERNAL_STORAGE
];
var acceptedCount = 0;
list.forEach(element => {
permissions.checkPermission(element, function(status) {
if (status.hasPermission) {
acceptedCount++;
console.warn("getPermissions: checkPermission: Current acceptedCount: ", acceptedCount);
if (acceptedCount === list.length) {
console.warn("getPermissions: checkPermission: All permissions accepted - continue");
defer.resolve();
}
} else permissions.requestPermission(element, function() {
console.warn("getPermissions: requestPermission: All permissions accepted - continue");
defer.resolve();
}, null);
}, null);
});
return defer.promise;
};
发布于 2019-08-01 08:22:39
用诺言ES6制定的解决方案:
checkAppPermissions: function () {
return new Promise(function (resolve) {
let permissions = cordova.plugins.permissions;
let permissionList = [
permissions.CAMERA,
permissions.RECORD_AUDIO,
permissions.WRITE_EXTERNAL_STORAGE
];
let acceptedCount = 0;
permissionList.forEach(perm => {
permissions.checkPermission(perm, function (status) {
if (status.hasPermission) {
acceptedCount++;
console.log('checkAppPermission: checkPermission: Current acceptedCount: ', acceptedCount);
if (acceptedCount === permissionList.length) {
console.log('checkAppPermission: checkPermission: All permissions accepted.');
resolve();
}
} else permissions.requestPermission(perm, function () {
console.log('checkAppPermission: requestPermission: All permissions accepted.');
resolve();
}, null);
}, null);
});
});
},
https://stackoverflow.com/questions/43876604
复制相似问题