Android動態許可權申請
阿新 • • 發佈:2020-07-21
從Android 6.0開始,許可權不再是在manifest檔案中貼上一下即可申請,即便使用者授權,許可權可不是永久的。
Android系統許可權的概念:
Android是一個許可權分隔的作業系統,每個應用都有獨特的系統標識。一般情況下,應用沒有許可權執行對其它應用、系統、使用者可能有不利影響的操作。每個應用都在應用沙盒中執行,因此當應用需要使用沙盒未提供的功能時,需要申請許可權,比如讀寫sd卡、訪問網路、訪問其它應用的資料、讀寫聯絡人、呼叫攝像頭等。許可權在AndroidManifest.xml檔案中宣告,Android 6.0以前,有的APP一股腦聲明瞭各種各樣的許可權,使用者可能沒有細看就安裝了,於是這些APP就可以為所欲為,無法無天。Android 6.0把許可權分成正常許可權和危險許可權,AndroidManifest中宣告的正常許可權系統會自動授予,而危險許可權則需要在使用的時候使用者明確授予。就是Android 6.0以上的系統在第一次使用危險許可權的時候,需要向用戶申請,徵得使用者的同意。如果還是在沒有許可權的情況下執行操作就會Crash,錯誤日誌為java.lang.SecurityException: Permission Denial
。因此,應用對危險許可權的申請,需要相應的處理。
危險許可權和對應的許可權組
危險許可權都屬於許可權組,應用在向用戶申請危險許可權時,系統會彈對話方塊,描述應用要訪問的許可權組,這時候使用者如果同意授權,則許可權組包含的所有許可權都會被系統授予。比如,應用被授予READ_EXTERNAL_STORAGE許可權之後,如果再申請WRITE_EXTERNAL_STORAGE許可權,系統會立即授予該許可權。
危險許可權表格如下
許可權組 | 許可權 |
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 |