Android 6.0 及 Android 7.0 相关新特性

Andorid 6.0 运行时权限

1.Android 6.0 运行时权限新增 API

// 检查某个权限是否授权
ContextCompat.checkSelfPermission(Context context, String permission);

// 申请一个或多个权限
ActivityCompat.requestPermissions(Activity activity, String[] permissions, int requestCode);

// 是否显示请求权限的说明
ActivityCompat.shouldShowRequestPermissionRationale(Activity activity, String permission);

处理权限结果

@Override
public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){
    switch(permsRequestCode){
        case REQUEST_XX_PERMISSION:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //授权成功
            } else {
                //授权拒绝
            }
            break;
    }
}

2.Android 6.0 运行时权限处理

(1)在AndroidManifest文件中添加需要的权限(我们假设权限xx);

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

(2)在Java代码中进行动态授权:

private static final int REQUEST_XX_PERMISSION=10;

/**
 * 这个方法在需要进行授权的地方调用
 */
private void requestXxPermission(){
    //判断系统版本
    if (Build.VERSION.SDK_INT >= 23) {
        //检测当前app是否拥有某个权限
        int checkCallPhonePermission = ContextCompat.checkSelfPermission(this, Manifest.permission.xx);
        //判断这个权限是否已经授权过
        if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){
            //判断是否需要 向用户解释,为什么要申请该权限,该方法只有在用户在上一次已经拒绝过你的这个权限申请才会调用。
            if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.xx))
                Toast.makeText(this,"Need xx permission.",Toast.LENGTH_SHORT).show();
            /**
             * 参数1 Context
             * 参数2 需要申请权限的字符串数组,支持一次性申请多个权限,对话框逐一询问
             * 参数3 requestCode 主要用于回调的时候检测
             */
            ActivityCompat.requestPermissions(this ,new String[]{Manifest.permission.xx},REQUEST_BLUETOOTH_PERMISSION);
            return;
        }else{
        }
    } else {
    }
}

(3)授权回调处理

@Override
public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){
    switch(permsRequestCode){
        case REQUEST_XX_PERMISSION:
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //授权成功
            } else {
                //授权拒绝
            }
            break;
    }
}

对于权限的申请结果,首先验证requestCode定位到你的申请,然后验证grantResults对应于申请的结果,这里的数组对应于申请时的第二个权限字符串数组。如果你同时申请两个权限,那么grantResults的length就为2,分别记录你两个权限的申请结果。如果申请成功,就可以做你的事情了。

[Google官方权限文档](https://developer.android.google.cn/guide/topics/security/permissions.html#perm-groups

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值