EasyAndroid是一款專一於提供各類基礎組件的集成庫java
做爲一款集成組件庫,此庫中所集成的組件,均包含如下特色:android
EasyPermissions是開源庫EasyAndroid的基礎組件之一,用於對Android 6.0及以上版本,進行動態權限申請
git
若你不須要其餘集成組件。只想用EasyPermissions。能夠直接拷貝集成庫中的EasyPermissions類到項目中,直接進行使用。github
下面的圖爲通用的動態權限申請流程圖。EasyPermissions的執行流程也是與此一致的api
EasyPermissions.create(Manifest.permissions.WRITE_CONTACTS)
.request(activity)
複製代碼
PS: 請注意此處的request方法傳入的Activity,須要爲當前棧頂層的Activity實例,不然將可能致使沒法接收權限返回信息的問題bash
EasyPermissions.create(Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.WRITE_CALENDAR,
Manifest.permission.WRITE_CONTACTS
).request(this)
複製代碼
EasyPermissions.create(permission1, permission2 ... permissionN)
.callback {grant:Boolean -> // grant爲true表示全部權限均申請成功}
.request(activity)
複製代碼
權限申請說明
部分的流程爲上方流程圖中的Rational部分。這部分流程系統只提供了shouldShowRequestPermissionRationale
方法提示開發者:這裏須要向用戶展現申請此權限的緣由,以達到更好的用戶體驗。ui
因此,EasyPermissions也對應提供了rational方法,進行方便的建立說明提醒:this
EasyPermissions.create(permissions)
.retional {
permission:String, // 須要進行用戶提示的權限
chain: RationalChain -> // 內部API。若須要提示時,則須要使用此鏈表在用戶操做後接入後續流程
// 返回true。表示此permission權限將會進行提醒說明,
// 先暫時對權限申請流程進行阻塞,待後續用戶操做後,經過chain實例進行流程喚醒
return@rational true|false
}
.request(activity)
複製代碼
舉個具體例子spa
EasyPermissions.create(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.rational { permission, chain ->
AlertDialog.Builder(this)
.setTitle("權限申請說明")
.setMessage("應用須要此權限:\n$permission")
.setNegativeButton("拒絕", {_, _ -> chain.cancel()// 通知用戶拒絕 })
.setPositiveButton("贊成", {_, _ -> chain.process()// 用戶贊成,繼續流程 })
.show()
return@rational true
}.callback(callback)
.request(this)
複製代碼