Android运行时权限笔记

本文介绍了Android 6.0及更高版本的运行时权限机制,详细讲解了权限分类,包括普通权限和危险权限的区分。文章通过示例演示了如何在程序运行时动态申请权限,如CALL_PHONE权限和使用百度定位的权限申请流程,同时阐述了一次申请多个权限的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android权限机制

  1. 保护用户安全和隐私
  2. 低于6.0系统安装APP权限一次性申请
  3. 运行时权限

Android权限分类

  1. 普通权限(自动授权)
  2. 危险权限(手动授权)——9组24个权限
    Android所有危险权限,9组24个权限

在程序运行时申请权限

  1. AndroidManifest.xml中
    <uses-permission android:name="android.permission.CALL_PHONE">
  2. ContextCompat.checkSelfPermission(Context,权限名)方法,判断是否授权PackageManager.PERMISSION_GRANTED
  3. ActivityCompat.requestPermissions(Activity实例,String数组,请求码)申请授权
if(ContextCompat.checkSelfPermission(MainActivity.this,Mainifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED)
{
	//没有授权,则申请授权
	ActivityCompat.requestPermissions(MainActivity.this,new String[]{android.Manifest.permission.CALL_PHONE},1)
}else{
	//有授权,则执行逻辑
}
  1. 回调onRequestPermissionsResult(请求码,String数组,授权结果grantResults)方法
switch(requestCode){
	case 1:
		if(grantResult.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
			//执行业务逻辑
		}else{
			//提示未授权
		}
		break;
	default:
}

一次申请多个权限

  1. 创建List<String>集合
List<String> permissionList = new ArrayList<>();
  1. 依次判断是否授权,未授权就添加到List集合
if(ContextCompat.checkSelfPermission(MainActivity.this,android.Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED)
{
	//没有授权,则加入List
	permissonList.add(Mainifest.permission.CALL_PHONE);
}
  1. 判断是否需要申请
if(!permissionList.isEmpty()){
	//需要申请
	//第4、第5步
}else{
	//已有权限,无需申请
	//执行业务逻辑
}
  1. List转换成String数组
String[] permissons = permissionList.toArray(new String[peimissionList.size()]);
  1. String数组传入ActivityCompat.requestPermissions()
ActivityCompat.requestPermissions(MainActivity.this,permissions,1);
  1. onRequestPermissionResult()中循环判断是否全部授权
if(grantResults.length>0){
	for(int result:grantResults){
		//若有一个未授权,则结束程序
		if(result!=PackageManager.PERMISSION_GRANTED){
			finish();
			return;
		}
	}
	//执行业务逻辑
}else{
	//未知错误
}

Demo:获取CALL_PHONE授权

Demo:使用百度定位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值