科尔多瓦有多重权限

时间:2017-05-09 17:46:05

标签: cordova permissions runtime

我需要一种在运行时同时请求所有权限的方法。

我正在使用此插件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');
                }
            }

提前全部谢谢!

3 个答案:

答案 0 :(得分:1)

尝试Cordova diagnostic plugin

此插件有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()