什麼是EasyAndroid?
EasyAndroid是一款專注於提供各種基礎元件的整合庫
作為一款整合元件庫,此庫中所整合的元件,均包含以下特點:
- 精簡: 作為一款整合庫,我不希望有那種大元件,儘量控制好整合庫的大小。不要有冗餘程式碼
- 內聚: 儘量減少甚至避免單一元件對別的模組進行依賴。做到元件間獨立。
什麼是EasyPermissions
EasyPermissions是開源庫EasyAndroid的基礎元件之一,用於對Android 6.0及以上版本,進行動態許可權申請
若你不需要其他整合元件。只想用EasyPermissions。可以直接拷貝整合庫中的EasyPermissions類到專案中,直接進行使用。
特性
- api鏈式呼叫,呼叫鏈更絲滑~
- 支援定製許可權申請說明彈窗
- 支援同時申請多個許可權
- 多許可權申請時進行去重
- 支援在任意執行緒進行許可權申請
流程圖
下面的圖為通用的動態許可權申請流程圖。EasyPermissions的執行流程也是與此一致的
用法舉例
1. 申請寫入聯絡人許可權:(單一許可權申請)
EasyPermissions.create(Manifest.permissions.WRITE_CONTACTS)
.request(activity)
複製程式碼
PS: 請注意此處的request方法傳入的Activity,需要為當前棧頂層的Activity例項,否則將可能導致無法接收許可權返回資訊的問題
2. 同時申請多個許可權
EasyPermissions.create(Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.WRITE_CALENDAR,
Manifest.permission.WRITE_CONTACTS
).request(this)
複製程式碼
3. 接收許可權申請結果
EasyPermissions.create(permission1, permission2 ... permissionN)
.callback {grant:Boolean -> // grant為true表示所有許可權均申請成功}
.request(activity)
複製程式碼
4. 定製許可權申請說明彈窗
許可權申請說明
部分的流程為上方流程圖中的Rational部分。這部分流程系統只提供了shouldShowRequestPermissionRationale
方法提示開發者:這裡需要向使用者展示申請此許可權的原因,以達到更好的使用者體驗。
所以,EasyPermissions也對應提供了rational方法,進行方便的建立說明提醒:
EasyPermissions.create(permissions)
.retional {
permission:String, // 需要進行使用者提示的許可權
chain: RationalChain -> // 內部API。若需要提示時,則需要使用此連結串列在使用者操作後接入後續流程
// 返回true。表示此permission許可權將會進行提醒說明,
// 先暫時對許可權申請流程進行阻塞,待後續使用者操作後,通過chain例項進行流程喚醒
return@rational true|false
}
.request(activity)
複製程式碼
舉個具體例子
EasyPermissions.create(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.rational { permission, chain ->
AlertDialog.Builder(this)
.setTitle("許可權申請說明")
.setMessage("應用需要此許可權:
$permission")
.setNegativeButton("拒絕", {_, _ -> chain.cancel()// 通知使用者拒絕 })
.setPositiveButton("同意", {_, _ -> chain.process()// 使用者同意,繼續流程 })
.show()
return@rational true
}.callback(callback)
.request(this)
複製程式碼