Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android6.0新的授權方式和PermissionM的使用

Android6.0新的授權方式和PermissionM的使用

編輯:關於Android編程

關於Android M(6.0)新的授權方式

只有我們設置app的targetSdkVersion為23,並且app運行在6.0之後的設備才使用新的權限系統。

在Android6.0,app不會在安裝時授予權限,而是在app運行時一個一個詢問用戶授予權限。

權限詢問對話框不會自己彈出來,開發者必須自己調用。如果我們調用一些函數需要某權限而用戶拒絕授權,函數就拋出異常直接導致程序崩潰。

Android6.0用戶可以隨時在設置裡取消已經授權的權限。

Android6.0權限的分類

Android6.0分了幾種權限:Normal Permissions(安裝時自動授權,用戶也不能取消權限) 和 Dangerous Permissions

Dangerous Permissions 就是我們必須手動申請的那種。後面會有具體的介紹。

權限組的概念

同一組的任何一個權限被授權了,其他權限也自動被授權。例如:一旦WRITE_CONTACTS被授權了,app也有READ_CONTACTS和GET_ACCONTS了。

以下是權限和權限組:
這裡寫圖片描述

普通權限

只需要在AndroidManifest.xml中簡單聲明這些權限就好,安裝時就授權。不需要每次使用時都檢查權限,而且用戶不能取消以下授權。

android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_NOTIFICATION_POLICY
android.permission.ACCESS_WIFI_STATE
android.permission.ACCESS_WIMAX_STATE
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.BROADCAST_STICKY
android.permission.CHANGE_NETWORK_STATE
android.permission.CHANGE_WIFI_MULTICAST_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.CHANGE_WIMAX_STATE
android.permission.DISABLE_KEYGUARD
android.permission.EXPAND_STATUS_BAR
android.permission.FLASHLIGHT
android.permission.GET_ACCOUNTS
android.permission.GET_PACKAGE_SIZE
android.permission.INTERNET
android.permission.KILL_BACKGROUND_PROCESSES
android.permission.MODIFY_AUDIO_SETTINGS
android.permission.NFC
android.permission.READ_SYNC_SETTINGS
android.permission.READ_SYNC_STATS
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.REORDER_TASKS
android.permission.REQUEST_INSTALL_PACKAGES
android.permission.SET_TIME_ZONE
android.permission.SET_WALLPAPER
android.permission.SET_WALLPAPER_HINTS
android.permission.SUBSCRIBED_FEEDS_READ
android.permission.TRANSMIT_IR
android.permission.USE_FINGERPRINT
android.permission.VIBRATE
android.permission.WAKE_LOCK
android.permission.WRITE_SYNC_SETTINGS
com.android.alarm.permission.SET_ALARM
com.android.launcher.permission.INSTALL_SHORTCUT
com.android.launcher.permission.UNINSTALL_SHORTCUT

PermissonM介紹

PermissionM下有4個類 管理類,工具類和監聽器

可以判斷以下幾種情況:調用的方法已經被授權,直接調用;還沒被授權,申請用戶授權;用戶拒絕授權,再次申請授權
這裡寫圖片描述

@@PermissionM的使用

在6.0下我們要調用必須需要用到權限的方法時可以用PermissionM,只需4步

在清單文件注冊你要用的權限

new 一個權限監聽器

在調用方法前,調用checkPermissions查看你要申請的方法是否被授權

接受權限授權結果的回調結果並處理

PermissionM代碼示例(PermissionsDemo)

在MainActivity中先new一個AbstractPermissionMListener權限監聽器
這裡寫圖片描述
有三個回調方法:
onPermissionsGranted():這個方法在你申請的所有方法都獲得授權時調用; onPermissionsDenied():這個方法在你申請的權限數組裡有一個或者多個權限沒有獲得授權時調用; onShowRequestPermissionRationale():這個方法在用戶拒絕授權後再次點擊時調用;

用戶點擊“調用照相機”觸發showCamera方法 ,這時我們開始檢查權限
這裡寫圖片描述

調用PermissionsMDispatcher.checkPermissions()方法,注意最後一個參數如果一次需要申請多個權限就傳數組,其實申請一個權限也放數組裡就行

一定要注意接收系統的回調!!
這裡寫圖片描述

重寫系統的onRequestPermissionsResult()方法,調用管理類的onRequestPermissionsResult()方法,這裡還要傳監聽器,因為邏輯的判斷都寫在監聽器的回調方法裡了

如果獲得了用戶的授權,接下來就可以調用我們想用的方法了,方法要寫在獲得權限成功的onPermissionsGranted()方法裡
這裡寫圖片描述

如果用戶拒絕授權,可以給用戶一個響應
這裡寫圖片描述

如果用戶拒絕授權又點擊了,就回調onShowRequestPermissionRationale(),demo裡我彈出個snackbar告訴用戶我為什麼需要用到這個權限,然後可以繼續請求授權
這裡寫圖片描述

如果用戶真的不想授權勾選了“不再提示我”,那麼以後再點擊就回調onPermissionsDenied()了

運行截圖

這裡寫圖片描述 這裡寫圖片描述 這裡寫圖片描述 這裡寫圖片描述 這裡寫圖片描述 這裡寫圖片描述 這裡寫圖片描述
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved