EasyAndroid基礎整合元件庫之:EasyPermissions 動態許可權申請庫

Haoge發表於2019-03-03

什麼是EasyAndroid?

EasyAndroid是一款專注於提供各種基礎元件的整合庫

作為一款整合元件庫,此庫中所整合的元件,均包含以下特點:

  1. 精簡: 作為一款整合庫,我不希望有那種大元件,儘量控制好整合庫的大小。不要有冗餘程式碼
  2. 內聚: 儘量減少甚至避免單一元件對別的模組進行依賴。做到元件間獨立。

什麼是EasyPermissions

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

若你不需要其他整合元件。只想用EasyPermissions。可以直接拷貝整合庫中的EasyPermissions類到專案中,直接進行使用。

特性

  • api鏈式呼叫,呼叫鏈更絲滑~
  • 支援定製許可權申請說明彈窗
  • 支援同時申請多個許可權
  • 多許可權申請時進行去重
  • 支援在任意執行緒進行許可權申請

流程圖

下面的圖為通用的動態許可權申請流程圖。EasyPermissions的執行流程也是與此一致的

EasyAndroid基礎整合元件庫之: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("應用需要此許可權:\n$permission")
                .setNegativeButton("拒絕", {_, _ -> chain.cancel()// 通知使用者拒絕 })
                .setPositiveButton("同意", {_, _ -> chain.process()// 使用者同意,繼續流程 })
                .show()
        return@rational true
    }.callback(callback)
    .request(this)
複製程式碼

效果展示

EasyAndroid基礎整合元件庫之:EasyPermissions 動態許可權申請庫

相關文章