對于Android開發(fā)來說我們一般都會需要申請權(quán)限官辽,android6.0以上瑰煎,google為了系統(tǒng)的安全性坷衍,當(dāng)app用到設(shè)計到用戶隱私的權(quán)限的時候需要進(jìn)行權(quán)限適配注盈,所以我們僅僅在AndroidManifest中聲明權(quán)限還是不夠的。需要手動的進(jìn)行權(quán)限適配问慎,因此萍摊,在Android開發(fā)過程中,申請權(quán)限的方式分兩種形式如叼。
- 通過配置文件AndroidManifest.xml中編寫權(quán)限配置冰木。
- 通過在邏輯代碼中動態(tài)申請權(quán)限授權(quán)。
簡介
基于以上介紹笼恰,我們可以將Android權(quán)限分為兩大類:普通權(quán)限踊沸、高級權(quán)限,那么對應(yīng)起來社证,普通權(quán)限的申請在配置文件中編寫就能實現(xiàn)逼龟,而高級權(quán)限則需要動態(tài)申請并通過人工確認(rèn)來實現(xiàn),那么究竟哪些權(quán)限屬于普通權(quán)限追葡,哪些又屬于高級權(quán)限呢腺律?請看下文。
一宜肉、普通權(quán)限
1. 常見普通權(quán)限列表
權(quán)限名稱 | 所屬權(quán)限組 |
---|---|
ACCESS_LOCATION_EXTRA_COMMANDS | 定位權(quán)限 |
ACCESS_NETWORK_STATE | 網(wǎng)絡(luò)狀態(tài)權(quán)限 |
ACCESS_NOTIFICATION_POLICY | 通知 APP通知顯示在狀態(tài)欄 |
ACCESS_WIFI_STATE WiFi | 狀態(tài)權(quán)限 |
BLUETOOTH | 使用藍(lán)牙權(quán)限 |
BLUETOOTH_ADMIN | 控制藍(lán)牙開關(guān) |
BROADCAST_STICKY | 粘性廣播 |
CHANGE_NETWORK_STATE | 改變網(wǎng)絡(luò)狀態(tài) |
CHANGE_WIFI_MULTICAST_STATE | 改變WiFi多播狀態(tài)匀钧,應(yīng)該是控制手機(jī)熱點(猜測) |
CHANGE_WIFI_STATE | 控制WiFi開關(guān),改變WiFi狀態(tài) |
DISABLE_KEYGUARD | 改變鍵盤為不可用 |
EXPAND_STATUS_BAR | 擴(kuò)展bar的狀態(tài) |
GET_PACKAGE_SIZE | 獲取應(yīng)用安裝包大小 |
INTERNET | 網(wǎng)絡(luò)權(quán)限 |
KILL_BACKGROUND_PROCESSES | 殺死后臺進(jìn)程 |
MODIFY_AUDIO_SETTINGS | 改變音頻輸出設(shè)置 |
NFC | 支付 |
READ_SYNC_SETTINGS | 獲取手機(jī)設(shè)置信息 |
READ_SYNC_STATS | 數(shù)據(jù)統(tǒng)計 |
RECEIVE_BOOT_COMPLETED | 監(jiān)聽啟動廣播 |
REORDER_TASKS | 創(chuàng)建新棧 |
REQUEST_INSTALL_PACKAGES | 安裝應(yīng)用程序 |
SET_TIME_ZONE | 允許應(yīng)用程序設(shè)置系統(tǒng)時間區(qū)域 |
SET_WALLPAPER | 設(shè)置壁紙 |
SET_WALLPAPER_HINTS | 設(shè)置壁紙上的提示信息谬返,個性化語言 |
TRANSMIT_IR | 紅外發(fā)射 |
USE_FINGERPRINT | 指紋識別 |
VIBRATE | 震動 |
WAKE_LOCK | 鎖屏 |
WRITE_SYNC_SETTINGS | 改變設(shè)置 |
SET_ALARM | 設(shè)置警告提示 |
INSTALL_SHORTCUT | 創(chuàng)建快捷方式 |
UNINSTALL_SHORTCUT | 刪除快捷方式 |
2. 配置文件編寫方式
在AndroidManifest.xml文件中的manifest標(biāo)簽下編寫權(quán)限配置清單代碼如下(name中XXXX對應(yīng)的內(nèi)容就是上面提到的權(quán)限名稱):
<uses-permission android:name="android.permission.XXXX"/>
//配置網(wǎng)絡(luò)權(quán)限
<uses-permission android:name="android.permission.INTERNET/>
二之斯、高級權(quán)限
1. 高級權(quán)限列表
權(quán)限名稱 | 所屬權(quán)限組 |
---|---|
READ_CALENDAR | 日歷 |
WRITE_CALENDAR | 日歷 |
CAMERA | 相機(jī) |
READ_CONTACTS | 聯(lián)系人 |
WRITE_CONTACTS | 聯(lián)系人 |
GET_ACCOUNTS | 聯(lián)系人 |
ACCESS_FINE_LOCATION | 位置 |
ACCESS_COARSE_LOCATION | 位置 |
RECORD_AUDIO | 麥克風(fēng) |
READ_PHONE_STATE | 電話 |
CALL_PHONE | 電話 |
READ_CALL_LOG | 電話 |
WRITE_CALL_LOG | 電話 |
ADD_VOICEMAIL | 電話 |
USE_SIP | 電話 |
PROCESS_OUTGOING_CALLS | 電話 |
BODY_SENSORS | 傳感器 |
SEND_SMS | 短信 |
RECEIVE_SMS | 短信 |
READ_SMS | 短信 |
RECEIVE_WAP_PUSH | 短信 |
RECEIVE_MMS | 短信 |
READ_EXTERNAL_STORAGE | 存儲 |
WRITE_EXTERNAL_STORAGE | 存儲 |
2、動態(tài)權(quán)限申請方法
注意:動態(tài)申請的權(quán)限必須在配置文件中進(jìn)行配置
動態(tài)申請權(quán)限在需要使用權(quán)限的地方編寫邏輯代碼遣铝,官方代碼如下(以讀寫內(nèi)存權(quán)限為例):
public void requestAllPower() {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
} else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
}
}
判斷動態(tài)申請權(quán)限的結(jié)果代碼如下:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i] == PERMISSION_GRANTED) {
Toast.makeText(this, "" + "權(quán)限" + permissions[i] + "申請成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "" + "權(quán)限" + permissions[i] + "申請失敗", Toast.LENGTH_SHORT).show();
}
}
}
}
3. 小結(jié)
對于動態(tài)權(quán)限申請佑刷,可以采用封裝好的權(quán)限申請框架方便的處理權(quán)限申請問題,這樣有利于代碼的重用和整潔性酿炸,由于筆者經(jīng)驗有限瘫絮,還沒有對該類框架進(jìn)行深入的分析,這里推薦筆者收藏的幾個鏈接供大家參考:
三填硕、總結(jié)
筆者經(jīng)驗有限檀何,文章中所有的知識點來自Google官方文檔及博客內(nèi)容,后續(xù)會不斷豐富技術(shù)體系廷支,為大家貢獻(xiàn)更加有價值的知識分享,同時也希望看到文章的讀者和專家對文中的不妥之處進(jìn)行指正栓辜。
參考文獻(xiàn)
- 安卓權(quán)限大全-簡書作者[GB_speak]
- Android 6.0(API 23)及其以上動態(tài)申請的權(quán)限與申請權(quán)限的方法-CSDN作者[HeTingwei]
- Android6.0權(quán)限大全和權(quán)限分類-CSDN作者[DaXian-Will]
- Android系統(tǒng)完整的權(quán)限列表-CSDN作者[lianyi68]
轉(zhuǎn)載請注明出處:http://www.reibang.com/p/52e66d9e4a9a