EasyAndroid基礎集成組件庫之:EasyPermissions 動態權限申請庫

什麼是EasyAndroid?

EasyAndroid是一款專一於提供各類基礎組件的集成庫java

做爲一款集成組件庫,此庫中所集成的組件,均包含如下特色:android

  1. 精簡: 做爲一款集成庫,我不但願有那種大組件,儘可能控制好集成庫的大小。不要有冗餘代碼
  2. 內聚: 儘可能減小甚至避免單一組件對別的模塊進行依賴。作到組件間獨立。

什麼是EasyPermissions

EasyPermissions是開源庫EasyAndroid的基礎組件之一,用於對Android 6.0及以上版本,進行動態權限申請git

若你不須要其餘集成組件。只想用EasyPermissions。能夠直接拷貝集成庫中的EasyPermissions類到項目中,直接進行使用。github

特性

  • api鏈式調用,調用鏈更絲滑~
  • 支持定製權限申請說明彈窗
  • 支持同時申請多個權限
  • 多權限申請時進行去重
  • 支持在任意線程進行權限申請

流程圖

下面的圖爲通用的動態權限申請流程圖。EasyPermissions的執行流程也是與此一致的api

用法舉例

1. 申請寫入聯繫人權限:(單一權限申請)

EasyPermissions.create(Manifest.permissions.WRITE_CONTACTS)
	.request(activity)
複製代碼

PS: 請注意此處的request方法傳入的Activity,須要爲當前棧頂層的Activity實例,不然將可能致使沒法接收權限返回信息的問題bash

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方法提示開發者:這裏須要向用戶展現申請此權限的緣由,以達到更好的用戶體驗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)
複製代碼

效果展現

相關文章
相關標籤/搜索