1. 程式人生 > 實用技巧 >Android——許可權機制

Android——許可權機制

許可權機制

Android申請許可權需要在AndroidManifest.xml中新增許可權申請,在系統低於6.0的裝置上安裝的軟體只要在AndroidManifest.xml中聲明瞭的許可權就可以擁有那些許可權。

在系統6.0之後加入了執行時許可權功能,將所有許可權分為了兩類:普通許可權和危險許可權:

  • 普通許可權是指那些不會直接威脅到使用者安全和隱私的許可權,對於這部分許可權申請,只要在AndroidManifest.xml中新增許可權申請,系統會自動幫我們進行授權。
  • 危險許可權則表示那些可能會觸及使用者隱私或者對裝置安全性造成影響的許可權,如獲取裝置聯絡人資訊、定位裝置的地理位置等,對於這部分許可權申請採取執行時許可權功能,除了需要在AndroidManifest.xml中新增許可權申請,還需要由使用者手動點選授權才可以。

在加入執行時許可權後,安裝時只會賦予安裝的軟體申請的普通許可權,危險許可權需要使用者在要用到的時候同意對這項許可權進行授權才會賦予該許可權,不同意則無法使用該許可權。

下表列出了Android中的危險許可權,一共9組24個許可權:

許可權組名

許可權名

作用

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

使用SIP服務

PROCESS_OUTGOING_CALLS

查看向外呼叫期間所撥打的號碼(在API 29廢棄)

SENSORS

BOOY_SENSORS

從感測器中訪問資料

SMS

SEND_SMS

傳送SMS訊息

RECEIVE_SMS

接收SMS訊息

READ_SMS

讀取SMS訊息

RECEIVE_WAP_PUSH

接收WAP推送訊息

RECEIVE_MMS

監視傳入的MMS訊息

STORAGE

READ_EXTERNAL_STORAGE

讀取外部儲存

WRITE_EXTERNAL_STORAGE

寫到外部儲存器

檢視Android系統中完整的許可權列表:https://developer.android.google.cn/reference/android/Manifest.permission.html

執行時許可權申請程式碼(申請使用者聯絡人):

if (ContextCompat.checkSelfPermission(this,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED){

    ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CONTACTS},1);

}

  • checkSelfPermission(Context context, String permission)方法用於確定您是否已被授予特定許可權,接收兩個引數,第一個是Context,第二個是許可權名稱,返回值有兩個,PackageManager.PERMISSION_GRANTED表示已授予,PackageManager.PERMISSION_DENIED表示未授予。
  • requestPermissions(Activity activity, Array<String!> permissions, Int requestCode)方法用於請求要授予此應用程式的許可權,接收三個引數,第一個引數為Activity的例項,第二個引數是一個String陣列,裡面存放要申請的許可權名,第三個引數是請求碼,只要是唯一值就可以。

呼叫完requestPermissions()方法後,系統會彈出一個許可權申請的對話方塊,然後使用者可以選擇同意或拒絕該許可權申請,不論是哪種結果,都會回撥到onRequestPermissionsResult()方法中->

  • onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults)方法從請求許可權中回撥結果,有三個引數,前兩個引數前面有講,第三個引數儲存的是授權結果,可以在這個方法中寫授權操作之後需要的操作程式碼。