一個處理權限的庫-easypermissions

運用場景

  1. 谷歌在Android M版本之后,為了用戶安全,提出了權限機制,所以開發(fā)者需要在代碼層進行基本的系統(tǒng)權限邏輯編碼
  2. 開發(fā)者在基本的系統(tǒng)權限開發(fā)中,處理的邏輯有點繁瑣

這里介紹一個處理權限的庫-easypermissions,這個庫主要功能就是在系統(tǒng)權限的邏輯上面封裝了一些我們經(jīng)常用到的邏輯,更方便我們的使用,接下來我們一起去了解一下吧

結構介紹

jar包結構圖.png

1.activity和fragment頁面權限的申請
2.自定義的dialog
3.彈出系統(tǒng)設置頁面

簡單使用

依賴 implementation 'pub.devrel:easypermissions:2.0.0'

申請權限

這里舉個栗子,申請相機權限和地理位置權限

@AfterPermissionGranted(Constant.RC_CAMERA_AND_LOCATION)
      private fun methodRequiresTwoPermission() {
        val perms = arrayOf(Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION)
        if (EasyPermissions.hasPermissions(this, *perms)) {
            // Already have permission, do the thing
            // ...
        } else {
            // Do not have permissions, request them now
            //這個方法是用戶在拒絕權限之后,再次申請權限,才會彈出自定義的dialog,詳情可以查看下源碼 shouldShowRequestPermissionRationale()方法
            EasyPermissions.requestPermissions(
                    PermissionRequest.Builder(this, RC_CAMERA_AND_LOCATION, *perms)
                            .setRationale(R.string.camera)
                            .setPositiveButtonText(R.string.yes)
                            .setNegativeButtonText(R.string.no)
                            .build())
        }
    }  
//接受系統(tǒng)權限的處理,這里交給EasyPermissions來處理,回調(diào)到 EasyPermissions.PermissionCallbacks接口
      override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults,this)//注意這個this,內(nèi)部對實現(xiàn)該方法進行了查詢,所以沒有this的話,回調(diào)結果的方法不生效
    }

實現(xiàn) EasyPermissions.PermissionCallbacks ,重寫以下兩個方法 (彈出系統(tǒng)框時,用戶點擊接受和拒絕按鈕)

    override fun onPermissionsDenied(requestCode: Int, perms: MutableList<String>) {


        //  Check if at least one permission in the list of denied permissions has been permanently
        //  denied (user clicked "Never ask again").
        // This will display a dialog directing them to enable the permission in app settings.
        //如果用戶點擊永遠禁止,這個時候就需要跳到系統(tǒng)設置頁面去手動打開了
        if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
            AppSettingsDialog.Builder(this).build().show()
        }
    }
    override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) {

    } 

  override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
          //設置頁面跳轉(zhuǎn)需要處理的邏輯
        if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {
            // Do something after user returned from app settings screen, like showing a Toast.
            Toast.makeText(this, R.string.returned_from_app_settings_to_activity, Toast.LENGTH_SHORT)
                    .show()
        }
    }

實現(xiàn) EasyPermissions.RationaleCallbacks,重寫以下兩個方法 (彈出自定義dialog時,用戶點擊接受和拒絕按鈕)

    override fun onRationaleDenied(requestCode: Int) {

    }

    override fun onRationaleAccepted(requestCode: Int) {

    }

好啦,大概這個權限庫就這么簡單的介紹完了,可以github上看看,多學學別人寫的代碼也是蠻不錯的,里面有些設計模式也可以學習一下

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容