Android 6.0的权限了解和简单测试

1. 6.0的权限怎么了?

以前 : 安装了app后,发现app经常访问我们的通讯录等等隐私信息,没有经过我们同意,怎么可以呢?

6.0: 安装app后,如果想访问通讯录这类隐私, 会弹出对话框提示,需要我们的同意,可以点击确定或者取消,是不是有了权利,否决很多危险的权限。

当然如果不想遇到运行权限的问题, 只需要将targetSdkVersion设置低于23就可以了

2. 危险权限有那些?那些是安全的呢?

adb查危险权限: adb shell pm list permissions -d -g

group:android.permission-group.CONTACTS
  permission:android.permission.WRITE_CONTACTS
  permission:android.permission.GET_ACCOUNTS
  permission:android.permission.READ_CONTACTS

group:android.permission-group.PHONE
  permission:android.permission.READ_CALL_LOG
  permission:android.permission.READ_PHONE_STATE
  permission:android.permission.CALL_PHONE
  permission:android.permission.WRITE_CALL_LOG
  permission:android.permission.USE_SIP
  permission:android.permission.PROCESS_OUTGOING_CALLS
  permission:com.android.voicemail.permission.ADD_VOICEMAIL

group:android.permission-group.CALENDAR
  permission:android.permission.READ_CALENDAR
  permission:android.permission.WRITE_CALENDAR

group:android.permission-group.CAMERA
  permission:android.permission.CAMERA

group:android.permission-group.SENSORS
  permission:android.permission.BODY_SENSORS

group:android.permission-group.LOCATION
  permission:android.permission.ACCESS_FINE_LOCATION
  permission:android.permission.ACCESS_COARSE_LOCATION

group:android.permission-group.STORAGE
  permission:android.permission.READ_EXTERNAL_STORAGE
  permission:android.permission.WRITE_EXTERNAL_STORAGE

group:android.permission-group.MICROPHONE
  permission:android.permission.RECORD_AUDIO

group:android.permission-group.SMS
  permission:android.permission.READ_SMS
  permission:android.permission.RECEIVE_WAP_PUSH
  permission:android.permission.RECEIVE_MMS
  permission:android.permission.RECEIVE_SMS
  permission:android.permission.SEND_SMS
  permission:android.permission.READ_CELL_BROADCASTS

**分组: ** 从上面的权限看到,是分组哦,如果以前组员获得了我们的同意,同组的其他权限不会在通知我们了哦.

**3 . Sample : **

下面看看6.0的权限,代码中怎么管理呢?(以前都是 知道的,直接AndroidManifest.xml中

例子:小米5设备的6.0版本

加入拍照的危险权限


直接运行时,报错:

QQ截图20170220154644.png

解决:

1: checkSelfPermission方法对camera的权限去检查是否已经授权,如果没有去申请

//去申请权限
if(ContextCompat.checkSelfPermission(mActivity.getApplicationContext()
        , Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){//PERMISSION_GRANTED允许

    ActivityCompat.requestPermissions(mActivity, new String[]{Manifest.permission.CAMERA}, PERMISSION_CAMERA_TAG);

}else{
    //已经授权了
    startCamera();
}

2: 如果没有去申请ActivityCompat.requestPermissions去申请

  ActivityCompat.requestPermissions(mActivity, new String[]{Manifest.permission.CAMERA}, PERMISSION_CAMERA_TAG);

app开启时提示:

Android 6.0的权限了解和简单测试_第1张图片
device-2017-02-20-160921.png

3: 点击了也许或者拒绝,要回调给我们结果,直接在activity或者fragment中重写方法

/**
* 权限申请的回调
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    //允许的情况
    if(requestCode == PERMISSION_CAMERA_TAG){

        if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
            startCamera();
        }else{
            Toast.makeText(mActivity, "Permission denied", Toast.LENGTH_SHORT).show();
        }
    }
}

6.0的运行时权限,我们最终都是要支持的,通常我们需要使用如下的API

* int checkSelfPermission(String permission) 用来检测应用是否已经具有权限
* void requestPermissions(String[] permissions, int requestCode) 进行请求单个或多个权限
* void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) 用户对请求作出响应后的回调

这样就结束了吗? 上面是一个权限的申请,假如多个危险权限的申请呢?

因为多个在权限申请时是固定的步骤,大量的重复代码,固定的流程,所以就会考虑封装。下一篇研究一下封装哦,加油!

你可能感兴趣的:(Android 6.0的权限了解和简单测试)