我需要一种在运行时同时请求所有权限的方法。
我正在使用此插件https://github.com/NeoLSN/cordova-plugin-android-permissions,但在运行时,应用程序正在运行它只请求一个权限...随机三个中的一个。再次,当我接受READ_PHONE_STATE权限时,需要重新启动应用程序以获取读取电话状态,特别是传入号码。
代码:
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');
}
}
提前全部谢谢!
答案 0 :(得分:1)
此插件有requestRuntimePermission()
。来自the docs:
<强> requestRuntimePermissions()强>: 请求app被授予多个运行时的授权 权限。
示例:
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
]);
答案 1 :(得分:0)
我提出了一种可以与您要求的cordova-plugin-android-permission配合使用的解决方案。
目前,该解决方案是使用AngularJS使用ES5制作的,但可以将其重写为打字稿或ES6。当您需要一个或多个权限时,可以调用此promise函数,当所有/已经接受的权限都将返回。
--parallel 8
答案 2 :(得分:0)
用诺言ES6制成的解决方案:
Cinema.objects.filter(show__movie_id=movie_id).distinct()