关于安卓权限的一些认识

运行时权限

Android的权限机制从系统第一个版本开始就已经存在,从Android6.0开始引入了运行时权限这个概念,权限可以分为以下两类:

  • 普通权限
  • 危险权限

判断权限种类的方法:是否直接威胁到用户的安全和隐私
普通权限之外的均是危险权限,危险权限一共9组24个权限
危险权限组
运行时权限处理时,用户一旦同意授权,该权限所在的权限组的其他所有权限均会被授权
无论是普通权限还是危险权限,均要添加在AndroidManifest.xml中

如何实现运行时权限处理的功能

拨打电话的例子

  • 在布局文件中添加按钮
<Button
        android:id="@+id/make_call"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="make call"
        android:textSize="18sp"
        />
  • 在MainActivity.class中完善逻辑
    • 检查是否申请权限
      • 动态申请权限
        • 权限申请弹窗
          • 成功:拨打电话
          • 权限申请失败
      • 拨打电话

1.是否申请权限

if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.CALL_PHONE)!=
                        PackageManager.PERMISSION_GRANTED){
                   // ActivityCompat.requestPermissions(MainActivity.this,new String[]{
                   //        Manifest.permission.CALL_PHONE},1);
                }else{
                    call();
                }
//该方法接收两个参数:上下文,需要申请的权限,返回整数                                

2.动态申请权限

ActivityCompat.requestPermissions(MainActivity.this,new String[]{
                            Manifest.permission.CALL_PHONE},1);
//该方法接收三个参数:上下文,字符串数组存储申请权限,请求码(传入1)

3.回调方法

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){
            case 1:
                if(grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    call();
                }
                else {
                    Toast.makeText(MainActivity.this,"you denid the permission",Toast.LENGTH_SHORT).show();
                }
                break;
            default:
        }
    }
//回调方法:动态申请权限弹窗之后会回调该方法,第一个参数为请求码,第三个参数为授权结果

4.拨打电话

 private void call(){
        try{
            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:10086"));
            startActivity(intent);
        }catch(SecurityException e){
            e.printStackTrace();
        }
    }
  • 在AndroidManifest.xml中添加权限

运行效果

运行时权限申请
call

猜你喜欢

转载自blog.csdn.net/HuangGang_clown/article/details/84665676