h***@163.com
h***@163.com
  • 发布:2022-03-29 18:51
  • 更新:2022-03-29 18:51
  • 阅读:1913

mui判断系统权限+开启系统权限+获取应用权限+打开应用权限设置界面

分类:MUI

/**

  • 获取系统权限
  • @param {Object} permission 权限标识
  • CAMERA: (String 类型 )访问摄像头权限 用于调用摄像头(plus.camera. plus.barcode.
  • CONTACTS: (String 类型 )访问系统联系人权限 用于访问(读、写)系统通讯录(plus.gallery.*)
  • GALLERY: (String 类型 )访问系统相册权限 用于访问(读、写)系统相册(plus.gallery.*)
  • LOCATION: (String 类型 )定位权限 用于获取当前用户位置信息(plus.geolocation.*)
  • NOTIFITION: (String 类型 )消息通知权限 用于接收系统消息通知(plus.push.*)
  • RECORD: (String 类型 )录音权限 用于进行本地录音操作(plus.audio.AudioRecorder)
  • SHORTCUT: (String 类型 )创建桌面快捷方式权限 用于在系统桌面创建快捷方式图标(plus.navigator.createShortcut)
  • @param {Object} successCallBack 成功回调
  • @param {Object} errorCallBack 失败回调
    */

function powerjudge() {
var context = plus.android.importClass("android.content.Context");
var locationManager = plus.android.importClass("android.location.LocationManager");
var main = plus.android.runtimeMainActivity();
var mainSvr = main.getSystemService(context.LOCATION_SERVICE);
var ismain = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)
//ismain false : 系统权限没有开启 true :系统权限已经开启
var btnArray = ['设置'];
if (ismain == false) {
mui.confirm('您需要打开定位权限,才可以使用【车辆定位】应用。', '定位服务已关闭', btnArray,
function(e) {
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass("android.content.Intent");
var mIntent = new Intent('android.settings.LOCATION_SOURCE_SETTINGS');
main.startActivity(mIntent);
});

} else {  
    // successCallBack 1:已经给到权限了 2、用户点击允许  
    // errorCallBack 1:本来就是拒接的  2、用户点击拒接  
    getPermission("LOCATION", function(res) {  
        // 下面逻辑  
        Unit_Icon();  
    }, function(res) {  
        if (res == "1" || res == "2") {  
            mui.confirm('定位权限被禁止,请到设置权限里找到应用手动开启权限,否则将不能使用此功能。', '定位权限被禁止', btnArray,  
                function(e) {  
                    var Intent = plus.android.importClass("android.content.Intent");  
                    var Settings = plus.android.importClass("android.provider.Settings");  
                    var Uri = plus.android.importClass("android.net.Uri");  
                    var mainActivity = plus.android.runtimeMainActivity();  
                    var intent = new Intent();  
                    intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);  
                    var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);  
                    intent.setData(uri);  
                    mainActivity.startActivity(intent);  
                });  
        } else {  
            msgShow(res);  
        }  

    })  
}  

}

function getPermission(permissionIdentity, successCallBack, errorCallBack) {
//权限标识转换成大写
var permissionIdentity = permissionIdentity.toUpperCase();
//获取检测权限的状态
var checkResult = plus.navigator.checkPermission(permissionIdentity);
//权限状态是否正常
var permissionStatusOk = false;
//权限中文名称
var permissionName = '';
//对应 andorid 的具体权限
var androidPermission = '';
//获取权限中文意思与对应 android 系统的权限字符串
switch (permissionIdentity) {
case 'LOCATION':
permissionName = '定位';
androidPermission = 'android.permission.ACCESS_COARSE_LOCATION';
break;
}

//判断检查权限的结果    
switch (checkResult) {  
    case 'authorized':  
        //正常的    
        permissionStatusOk = true  
        break;  
    case 'denied':  
        //表示程序已被用户拒绝使用此权限,如果是拒绝的就再次提示用户打开确认提示框    
        //如果有该权限但是没有打开不进行操作还是会去申请或手动打开    
        // console.log('已关闭' + permissionName + '权限')    
        // errorCallBack('已关闭' + permissionName + '权限');    
        // return    
        break;  
    case 'undetermined':  
        // 表示程序未确定是否可使用此权限,此时调用对应的API时系统会弹出提示框让用户确认    
        // this.requestPermissions(androidPermission, permissionName, successCallBack, errorCallBack)    
        // errorCallBack('未确定' + permissionName + '权限');    
        // return    
        break;  
    case 'unknown':  
        errorCallBack('无法查询' + permissionName + '权限');  
        return  
        break;  
    default:  
        errorCallBack('不支持' + permissionName + '权限');  
        return  
        break;  
}  

//如果权限是正常的执行成功回调    
if (permissionStatusOk) {  
    successCallBack("1")  
} else {  
    //如果不正常,如果是 andorid 系统,就动态申请权限    
    if (plus.os.name == 'Android') {  
        //动态申请权限    
        plus.android.requestPermissions([androidPermission], function(e) {  
            if (e.deniedAlways.length > 0) {  
                //权限被永久拒绝    
                // 弹出提示框解释为何需要定位权限,引导用户打开设置页面开启    
                //errorCallBack(permissionName + ' 权限被永久拒绝,请到设置权限里找到应用手动开启权限,否则将不能使用此功能。')  
                errorCallBack("1")  

                // console.log('Always Denied!!! ' + e.deniedAlways.toString());    
            }  
            if (e.deniedPresent.length > 0) {  
                //权限被临时拒绝    
                // 弹出提示框解释为何需要定位权限,可再次调用plus.android.requestPermissions申请权限    
                //errorCallBack('拒绝开启 ' + permissionName + ' 权限,将不能使用此功能!')  
                errorCallBack('2')  
                // console.log('Present Denied!!! ' + e.deniedPresent.toString());    
            };  
            if (e.granted.length > 0) {  
                //权限被允许    
                //调用依赖获取定位权限的代码    
                successCallBack("2")  
                // console.log('Granted!!! ' + e.granted.toString());    
            }  
        }, function(e) {  
            errorCallBack('请求 ' + permissionName + ' 权限失败,' + +JSON.stringify(e))  
            // console.log('Request Permissions error:' + JSON.stringify(e));    
        })  
    }  
}  

}

1 关注 分享
j***@163.com

要回复文章请先登录注册