1. 程式人生 > 實用技巧 >Android動態許可權申請

Android動態許可權申請

從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