Android小记——动态申请权限

动态权限需求原因
Android 6.0之前,权限在应用安装过程中只询问一次,以列表的形式展现给用户,然而大多数用户并不会注意到这些,直接就下一步了,应用安装成功后就会被赋予清单文件中的所有权限,应用就可以在用户不知情的情况下进行非法操作。
step1;检查版本

if(Build.VERSION.SDK_INT >= 23){
}
else
{
}

step2:检查权限
借助ContextCompat.checkSelfPermission( )方法
具体API

*public static int checkSelfPermission(@NonNull Context context, @NonNull String permission) 
{  
  if (permission == null)
     {  
        throw new IllegalArgumentException("permission is null");  
     }   
 return context.checkPermission(permission, android.os.Process.myPid(), Process.myUid());}*

step3:申请权限
通过调用ActivityCompat.requestPermissions()来向用户申请权限,该方法接受三个参数:Activity实例、String数组、请求码,唯一值即可,比如传入1

列子代码
 AcitivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE}, 1);

step4:重写onRequestPermissionsResult()方法
系统调用完了requestPermission()方法之后,会弹出申请权限对话框,无论我们选择了同意或拒绝权限申请,都会回调到onRequestPermissionResult()方法,因此可以进行优化,比如点击了拒绝可以弹出吐司提示。

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] 
grantResults) {  
	switch(requestCode){
		case 1 ://根据你传入的唯一值即:1
			if(permissions.length > 0 && permissions[0] == PackageManger.PERMISSION_GRANTED){
					//具体同意申请权限后的动作
			}
			else{
					Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();
			}
	}
}
动态申请调用电话权限示例代码
protected void onCreat(Bundle savedIntnceState){	
	if(Build.VERSION.SDK_INT >= 23){
		int result = ContextCompat.checkSelfPermission(MainActivity.this, Mainfest.permission.CALL_PHONE);
		if(result != PackageManager.Permission_GRANTED){
			ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);
		}else{
			call();
		}
	}else{
		//6.0系统才增加的权限申请
		call();
	}
}

public void call(){
	try{
		Intent intent = new Intent(Intent.Action_CALL);
		intent.setData(Uri.prase("tel:10086"));
		startActivity(intent);
	}else{
		e.printStackTrace();
	}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] 
grantResults) {  
	switch(requestCode){
		case 1 :
			if(permissions.length > 0 && permissions[0] == PackageManger.PERMISSION_GRANTED){
				call();
			}
			else{
					Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();
			}
	}
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值