关于Android6.0后动态申请权限的笔记

开始从事Android开发工作,主要在Camera上进行学习与开发。Camera的开发经常涉及到权限的申请,而Android6.0之后增加了动态权限申请,作为一个小白,每次开发都需要查询文档申请权限太繁琐。故写一篇博客,作为权限静态注册与动态申请的一个笔记。

1 权限静态注册声明

一般需要申请的权限首先都需要在AndroidManifest.xml进行静态注册,以CAMERA为例,注册如下(如果需要保存照片,还需要读写SD卡的权限):

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.moral.firebasefacedetect">
    <!-- 相机权限注册 -->
    <uses-permission android:name="android.permission.CAMERA" />
    <!-- 用于读写存储卡 -->
    <uses-feature android:name="android.hardware.camera.autocues" /> 

2 Android6.0之后动态权限申请

Andorid6.0之后的权限不仅要注册声明,还需要在程序运行时动态申请。
(1)需要申请的权限
为了统一对多个权限进行申请,将多个权限放入String[]中,在后面依次取出申请。

// 需要申请的权限集合
private static final String[] NEEDED_PERMISSIONS = new String[] 
{
	Manifest.permission.CAMERA,  // 相机权限
	... // 其他权限 
	}

(2)检查权限
对所有权限进行申请。

private boolen checkPermissions(String[] neededPermissions) {
	if (neededPermissions == null || neededPermissions.length == 0) {
		return true; 
		}
	boolen allGranted = true;
	for (String neededPermission : needPermissions) {
		allGranted &= ContextCompat.checkSelfPermission(this, neededPermission) == 
						PackageManager.PERMISSION_GRANTED;
	}
	return allGranted;
}

(3)权限检查结果与动态申请
检查权限是否全部申请。如果是,则开始相关代码;如果不是,则动态申请权限。

if (checkPermissions(NEEDED_PERMISSIONS)) {
	// 如果全部权限已申请通过,则编写自己代码逻辑
	initCamera(); // 比如初始化相机
} else {
	// 动态申请权限
	ActivityCompat.requestPermissions(this, NEEDED_PERMISSIONS, ACTION_REQUEST_CODE);
}

(4)权限动态申请结果
动态申请权限后,由用户决定是否授予权限。

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, 
	@NonNull int[]grantResults) {
	super.onRequestPermissionsResult(requestCode, permissions, grantResults);
	if (requestCode == ACTION_REQUEST_CODE) {
		boolen isAllGranted = true;
		for (int grantResult : grantResults) {
			isAllGranted &= (grantResult == PackageManager.PERMISSION_GRANTED);
		}
		
		if (isAllGranted) {
			// 权限授予成功,写自己的代码逻辑
			initCamera(); // 比如初始化相机
		} else {
			// 拒绝授予权限
		}
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Moralz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值