動(dòng)態(tài)權(quán)限分為兩類
1.不涉及隱私的權(quán)限
需要在Manifest中聲明
- 網(wǎng)絡(luò)權(quán)限
- 藍(lán)牙權(quán)限
- NFC權(quán)限等
2.涉及隱私的權(quán)限
也需要在Manifest中聲明
- SD卡讀寫(xiě)權(quán)限
- 短信讀寫(xiě)權(quán)限
- 聯(lián)系人讀寫(xiě)權(quán)限等
3.需要?jiǎng)討B(tài)授權(quán)的權(quán)限組
- **CALENDAR(日歷) **
READ_CALENDAR
WRITE_CALENDAR -
CAMERA(相機(jī))
CAMERA -
CONTACTS(聯(lián)系人)
READ_CONTACTS
WRITE_CONTACTS
GET_ACCOUNTS -
LOCATION(位置)
ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION -
MICROPHONE(麥克風(fēng))
RECORD_AUDIO - **PHONE(手機(jī)) **
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(存儲(chǔ)卡)
READ_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE
4.動(dòng)態(tài)申請(qǐng)權(quán)限
最簡(jiǎn)單的方法就是用Android Studio新建一個(gè)login項(xiàng)目,選擇Login Activity項(xiàng)目
- 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;
}

Paste_Image.png
checkSelfPermission(),shouldShowRequestPermissionRationale(),requestPermissions(),在Android SDK 23以上的API中,已經(jīng)存在的方法。Activity繼承AppCompatActivity就會(huì)存在。 如果使用低于23版本的SDK,可以使用v4 包的中AppCompat.checkSelfPermission()去調(diào)用,這是為了兼容23以下版本的兼容包工具。

Paste_Image.png
這里的數(shù)據(jù)就是你需要請(qǐng)求的權(quán)限組
當(dāng)權(quán)限請(qǐng)求成功時(shí),不要忘記,權(quán)限請(qǐng)求成功之后的回調(diào),需要重寫(xiě)onRequestPermissionsResult()方法,如下
- Paste_Image.png
5.推薦一個(gè)動(dòng)態(tài)申請(qǐng)權(quán)限的類庫(kù),GitHub上1000多star
直接點(diǎn)擊地址:
AndPermission : https://github.com/yanzhenjie/AndPermission

