ANDROID 6.0 PERMISSION

Android 6.0(API 23)的權限

建議在閱讀這篇文章之前,可以先瀏覽 Google Developers 的這兩篇內容

  1. https://developer.android.com/training/permissions/requesting.html
  2. https://developer.android.com/guide/topics/permissions/requesting.html#normal-dangerous

在6.0之前的版本, APP 向使用者要求權限,是在安裝的時候列出需要使用到哪些權限,使用者同意後進行安裝.大部分的使用者可能也不會注意到APP要求了哪些權限.(install time permission)

Android6.0 (API23)這個版本開始,有所改變.在安裝APP時,一樣會列出需要使用到哪些權限,但安裝後並不代表使用者同意開啟這些權限,而是在運行APP時,當要使用到該權限時.APP才會跳出提示,詢問使用者是否開啟權限.(Runtime permission)

這項機制站在使用者的角度,保護了個人的隱私安全,同時也將控制的權限交回了使用者手中,我覺得是非常好的.但站在程式撰寫者的角度,就會增加設計上的難度,及當使用到特定功能時要確認權限是開啟的狀態,才可以使用.

首先第一步是要確認 build.gradle 中 compileSdkVersion 必須為 23 以上,且targetSdkVersion 也為 23以上.(這邊提醒一點,在比較早期開發的APP中,若在 Android 6.0 以上手機運行時,若要關閉權限,會跳出提示提醒,若關閉權限後可能會出現異常.是因為比較早期的APP,在撰寫時並沒有加入判斷權限是否開啟的功能,若關閉後,會影響APP正常運行)

第二步,區分一般權限(Normal Permission)及危險權限(Dangerous Permission).

危險權限可以大致區分為 9 組,可以根據上述參考的第2個網址去查看,詳列如下:

  1. CALENDAR 日曆 ( READ_CALENDAR / WRITE_CALENDAR )

2. CAMERA 相機( CAMERA )

3. CONTACT 聯絡人( READ_CONTACTS / WRITE_CONTACTS / GET_ACCOUNTS )

4.LOCATION 位置( ACCESS_FINE_LOCATION 精準位置 / ACCESS_COARSE_LOCATION 大約位置 )

5. MICROPHONE 麥克風( RECORD_AUDIO )

6. PHONE 電話( READ_PHONE_STATE / CALL_PHONE / READ_CALL_LOG / WRITE_CALL_LOG / ADD_VOICEMAIL / USE_SIP / PROCESS_OUTGOING_CALLS )

7. SENSIOR 感應器( BODY_SENSORS )

8. SMS 簡訊( SEND_SMS / RECEIVE_SMS / READ_SMS / RECEIVE_WAP_PUSH / RECEIVE_MMS )

9. STORAGE 儲存( READ_EXTERNAL_STORAGE / WRITE_EXTERNAL_STORAGE )

當遇到上述這些危險權限時,會跳出提示,提醒使用者是否開啟權限( 前提是不管一般權限或危險權限,再使用前都必須先到 Android.Manifest.xml 中宣告 )

第三步,處理權限要求及允許或拒絕權限的動作

待補