Android 运行时权限

在Android6.0中加入了运行时权限,用户不需要在安装的时候指定所有的申请权限,而是在软件使用过程中再对某一权限进行授权。
如果在运行时添加了一次权限,那么以后就会默认全部添加权限,但是用户如果以后想要再次更改权限,可以到
Setting->Apps->RuntimePermissionTest->Permissions进行权限关闭

下表列举了所有的运行时权限,我们在运行时权限处理使用的是权限名,但是一旦某一个权限被授权了,那么该权限组中的所有权限都会被授权。

权限组名 权限名
CALENDAR READ_CALENDAR
  WRITE_CALENDAR
CAMERA CAMERA
LOCATION ACCESS_FINE_LOCATION
  ACCESS_COARSE_LOCATION
CONTACTS READ_CONTACTS
  WRITE_CONTACTS
  GET_ACCOUNTS
PHONE READ_HPONE_STATE
  CALL_PHONE
  READ_CALL_LOG
  WRITE_CALL_LOG
  ADD_VOICEMAIL
  USE_SIP
  PROCESS_OUTGOING_CALLS
SENSORS BODY_SENSORS
SMS SEND_SMS
  RECEIVE_SENSORS
  READ_SENSORS
  RECEIVE_WAP_PUSH
  RECEIVE_MMS
MICROPHONE RECORD_AUDIO
STORAGE READ_EXTERNAL_STORAGE
  WRITE_EXTERNAL_STORAGE

示例:打电话权限

首先在manifest中需要配置权限

<uses-permission android:name="android.permission.CALL_PHONE"/>

然后在MainActivity中进行检测 

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();
                }
private void call() {
        try {
            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:10086"));
            startActivity(intent);
        } catch (SecurityException e) {
            e.printStackTrace();
        }
    }

在程序中需要使用 ContextCompat.checkSelfPermission()方法判断用户是否已经授权,该方法接受两个参数,第一个是context上下文,第二个参数是需要授权的权限名,返回值是一个int值,然后与 PackageManager.PERMISSION_GRANTED进行比较,相等说明已经授权,否则即为没有授权。
没有授权就调用ActivityCompat.requestPermissions()方法用来向用户申请授权,该方法接受三个参数,第一个是当前活动的实例,第二个参数是一个字符串数组,包含了申请的权限,第三个参数是请求码。该方法调用完成之后会弹出一个对话框,让用户选择是否授权,不管授权与否都会回调onRequestPermissionsResult()方法,授权的结果会保存在该方法的第三个参数中

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 denied the permission", Toast.LENGTH_SHORT).show();
                }
                break;
            default:

        }
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值