当前位置:   article > 正文

uniapp权限管理 uniapp请求权限 uniapp检查是否有权限 ios权限管理 android权限管理 统一权限管理_uniapp android 网络权限

uniapp android 网络权限

uni-app是一个可以混编多端多平台的开发框架,不过相对于原生还是略有不便,比如对于权限的管理,不太方便去查询权限是否授权以及主动申请权限。基于这个情况,于是开发了一款 IOS和Android原生插件来满足需求。

前端代码:
<template>
	<view>
		<view class="title">IOS+Android统一检查权限:</view>
		<view class="test_flex_row_between">
			<text class="btn bg_green" @click="checkPermission('WRITE')">检查读写权限</text>
			<text class="btn bg_green" @click="checkPermission('CAMERA')">检查摄像头权限</text>
			<text class="btn bg_green" @click="checkPermission('LOCATION')">检查定位权限</text>
		</view>
		
		<view class="title">IOS+Android统一检查权限:</view>
		<view class="test_flex_row_between">
			<text class="btn bg_red" @click="requestPermission('WRITE')">申请读写权限</text>
			<text class="btn bg_red" @click="requestPermission('CAMERA')">申请摄像头权限</text>
			<text class="btn bg_red" @click="requestPermission('LOCATION')">申请定位权限</text>
		</view>
		
		<view class="title">Android检查权限:</view>
		<view class="test_flex_row_between">
			<text class="btn bg_blue" @click="checkPermissionAndroid('android.permission.WRITE')">检查读写权限</text>
			<text class="btn bg_blue" @click="checkPermissionAndroid('android.permission.CAMERA')">检查摄像头权限</text>
			<text class="btn bg_blue" @click="checkPermissionAndroid('android.permission.ACCESS_FINE_LOCATION')">检查定位权限</text>
		</view>
		
		<view class="title">Android申请权限:</view>
		<view class="test_flex_row_between">
			<text class="btn bg_red" @click="requestPermissionAndroid('android.permission.WRITE')">申请读写权限</text>
			<text class="btn bg_red" @click="requestPermissionAndroid('android.permission.CAMERA')">申请摄像头权限</text>
			<text class="btn bg_red" @click="requestPermissionAndroid('android.permission.ACCESS_FINE_LOCATION')">申请定位权限</text>
		</view>
		
		<view class="title">前往系统权限页面手动设置:</view>
		<view class="test_flex_row_between">
			<text class="btn bg_zise" @click="gotoSetting">前往系统授权页面</text>
		</view>
	</view>
</template>

<script>
	const permissionObj = uni.requireNativePlugin("LuanQing-Permission");
	export default {
		methods: {
			// 前往设置页面 手动配置应用权限
			gotoSetting(){
				permissionObj.gotoPermissionSettingPage();
			},
			// 统一权限检查
			checkPermission(name){
				let data = permissionObj.checkPermission({permission:name});
				console.error("检查完毕:",data);
			},
			// Android特有权限检查
			checkPermissionAndroid(name){
				let data = permissionObj.checkPermissionAndroid({permission:name});
				console.error("Android端原生检查完毕:",data);
			},
			// 统一权限申请
			requestPermission(name){
				console.error("统一申请权限:",name);
				permissionObj.requestPermission({permission:name},(res=>{
					console.error("权限申请成功嘞",res);
				}), (res=>{
					console.error("权限申请失败嘞",res);
				}));
			},
			// Android特有权限申请
			requestPermissionAndroid(name){
				permissionObj.requestPermissionAndroid({permission:name},(res=>{
					console.error("Android端原生权限申请成功嘞",res);
				}), (res=>{
					console.error("Android端原生权限申请失败嘞",res);
				}));
			},
		}
	}
</script>

<style>
@import url('test.css');
</style>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
插件代码 Android端 查询权限

为了方便android开发者的开发习惯,特别提供了基于原生android权限名称的方法requestPermissionAndroid,直接传入android端的权限名称即可,不局限于统一权限。

private JSONObject doCheck(boolean isNative,JSONObject options){
        UniLogUtils.e("是否是对象:",options.toJSONString());
        String permissionStr = options.getString("permission");
        String permission = isNative ? permissionStr : permissionMap.get(permissionStr);
        if(permission == null || "".equals(permission)){
            JSONObject data = new JSONObject();
            data.put("code",0);
            data.put("message","权限检查异常:未找到该权限:"+permission);
            UniLogUtils.e("检查权限模块返回:"+data.toJSONString());
            return data;
        }

        boolean isHas = ContextCompat.checkSelfPermission(mUniSDKInstance.getContext(), permission) == PackageManager.PERMISSION_GRANTED;

        JSONObject data = new JSONObject();
        data.put("code", isHas ? "1":"2");
        data.put("message",isHas ? "用户已授予权限!":"用户未授予权限");
        UniLogUtils.e("检查权限模块返回:"+data.toJSONString());
        return data;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
插件代码 IOS端 查询权限

IOS端因为需要和android端统一,因此只能使用两端统一的权限模块名称。

// 统一检查权限
UNI_EXPORT_METHOD_SYNC(@selector(checkPermission:))
- (NSDictionary *) checkPermission:(NSDictionary *) options{
    NSLog(@"进入检查权限API %@",options);
    NSString *permission = [options valueForKey:@"permission"];

    if(permission){
        Boolean isHas = false;
        // 相册访问权限
        if([@"WRITE" isEqualToString:permission]){
            isHas = [self checkPhoto];
        }
        // 相机权限
        else if([@"CAMERA" isEqualToString:permission]){
            isHas = [self checkCameraAudi:1];
        }
        // 麦克风权限
        else if([@"AUDIO" isEqualToString:permission]){
            isHas = [self checkCameraAudi:2];
        }
        // 定位权限
        else if([@"LOCATION" isEqualToString:permission]){
            isHas = [self checkLocatio];
        }
        // 通讯录
        else if([@"READ_CONTACTS" isEqualToString:permission]){
            isHas = [self checkContacts];
        }
        // 日历
        else if([@"CALENDAR" isEqualToString:permission]){
            isHas = [self checkCalendarAndMemorial:EKEntityTypeEvent];
        }
        // 备忘录
        else if([@"REMINDER" isEqualToString:permission]){
            isHas = [self checkCalendarAndMemorial:EKEntityTypeReminder];
        }
        // 蓝牙
        else if([@"BLUETOOTH" isEqualToString:permission]){
            isHas = [self checkBluetooth];
        }
        
        NSNumber* code = [NSNumber numberWithInt:(isHas ? 1 : 2)];
        NSString* mes = isHas ? @"用户已授予权限":@"用户未授予权限";
        NSDictionary *data = [NSDictionary dictionaryWithObjects:@[code,mes] forKeys:@[@"code",@"message"]];
        NSLog(@"进入检查权限API10 %@",data);

        return data;
    }else{
        NSNumber* code = [NSNumber numberWithInt: 0];
        NSDictionary *data = [NSDictionary dictionaryWithObjects:@[code , @"尚未选择检查的权限"] forKeys:@[@"code",@"message"]];
        NSLog(@"进入检查权限API11 %@",data);
        return data;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

链接: 前往下载插件和示例代码

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/274452
推荐阅读
相关标签
  

闽ICP备14008679号