首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Cordova多重权限

Cordova多重权限
EN

Stack Overflow用户
提问于 2017-05-09 17:46:04
回答 3查看 3.2K关注 0票数 2

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

我正在使用这个插件https://github.com/NeoLSN/cordova-plugin-android-permissions,但是当运行这个应用程序时,它只是随机地请求我三个permission...one中的一个。再次,当我接受READ_PHONE_STATE权限时,需要重新启动read状态的应用程序,特别是输入号码。

守则:

代码语言:javascript
运行
复制
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');
                }
            }

谢谢大家提前!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-09 19:19:00

试试Cordova诊断插件

这个插件有一个requestRuntimePermission()。来自医生们

requestRuntimePermissions():请求应用程序将获得多个运行时权限的授权。

示例:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2018-11-22 08:10:17

我做了一个解决方案,适用于你要求的cordova插件-android许可。

这些解决方案目前是用AngularJS使用ES5编写的,但可以重写为类型记录或ES6。当您需要一个或多个权限时,调用此允诺函数,当所有权限都已/已经被接受时,它将返回。

代码语言:javascript
运行
复制
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;
};
票数 0
EN

Stack Overflow用户

发布于 2019-08-01 08:22:39

用诺言ES6制定的解决方案:

代码语言:javascript
运行
复制
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);
        });
    });
},
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43876604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档