Android 6.0动态权限

动态权限分为两类

1.不涉及隐私的权限

需要在Manifest中声明

  • 网络权限
  • 蓝牙权限
  • NFC权限等

2.涉及隐私的权限

也需要在Manifest中声明

  • SD卡读写权限
  • 短信读写权限
  • 联系人读写权限等

3.需要动态授权的权限组

  • **CALENDAR(日历) **
    READ_CALENDAR
    WRITE_CALENDAR
  • CAMERA(相机)
    CAMERA
  • CONTACTS(联系人)
    READ_CONTACTS
    WRITE_CONTACTS
    GET_ACCOUNTS
  • LOCATION(位置)
    ACCESS_FINE_LOCATION
    ACCESS_COARSE_LOCATION
  • MICROPHONE(麦克风)
    RECORD_AUDIO
  • **PHONE(手机) **
    READ_PHONE_STATE
    CALL_PHONE
    READ_CALL_LOG
    WRITE_CALL_LOG
    ADD_VOICEMAIL
    USE_SIP
    PROCESS_OUTGOING_CALLS
  • SENSORS(传感器)
    BODY_SENSORS
  • SMS(短信)
    SEND_SMS
    RECEIVE_SMS
    READ_SMS
    RECEIVE_WAP_PUSH
    RECEIVE_MMS
  • STORAGE(存储卡)
    READ_EXTERNAL_STORAGE
    WRITE_EXTERNAL_STORAGE

4.动态申请权限

最简单的方法就是用Android Studio新建一个login项目,选择Login Activity项目

  • Android 6.0动态权限_第1张图片
    Paste_Image.png
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            return true;
        }
        if (checkSelfPermission(READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
            return true;
        }
        if (shouldShowRequestPermissionRationale(READ_CONTACTS)) {
            Snackbar.make(mEmailView, R.string.permission_rationale, Snackbar.LENGTH_INDEFINITE)
                    .setAction(android.R.string.ok, new View.OnClickListener() {
                        @Override
                        @TargetApi(Build.VERSION_CODES.M)
                        public void onClick(View v) {
                            requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
                        }
                    });
        } else {
            requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
        }
        return false;
    }
Android 6.0动态权限_第2张图片
Paste_Image.png

checkSelfPermission(),shouldShowRequestPermissionRationale(),requestPermissions(),在Android SDK 23以上的API中,已经存在的方法。Activity继承AppCompatActivity就会存在。 如果使用低于23版本的SDK,可以使用v4 包的中AppCompat.checkSelfPermission()去调用,这是为了兼容23以下版本的兼容包工具。

Android 6.0动态权限_第3张图片
Paste_Image.png

这里的数据就是你需要请求的权限组
当权限请求成功时,不要忘记,权限请求成功之后的回调,需要重写onRequestPermissionsResult()方法,如下

  • Android 6.0动态权限_第4张图片
    Paste_Image.png

5.推荐一个动态申请权限的类库,GitHub上1000多star

直接点击地址:
AndPermission : https://github.com/yanzhenjie/AndPermission

你可能感兴趣的:(Android 6.0动态权限)