Activity Results API 實現(xiàn)權(quán)限封裝庫

前言

  • 在以前我們一直用的是ActivityCompat.requestPermissions()去申請權(quán)限和重寫onRequestPermissionsResult()回調(diào)方法,對授權(quán)結(jié)果進(jìn)行判斷,執(zhí)行后續(xù)操作。
  • 但是目前這個方法已經(jīng)過時了,在網(wǎng)上找了一圈,大部分都是老方法,于是就決定自己重寫一套權(quán)限框架。
  • 項目地址:https://github.com/Peakmain/BasicLibrary

使用文檔

怎樣使用

Step 1. Add the JitPack repository to your build file

Add it in your root build.gradle at the end of repositories:

    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

but If it is a new version of Android studio,Add it in your root setting.gradle at the end of repositories:

dependencyResolutionManagement {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Step 2. Add the dependency

    dependencies {
            implementation 'com.github.Peakmain:BasicLibrary:1.1.1'
    }
是否授予權(quán)限
//判斷單個權(quán)限
PkPermission.isGranted(android.Manifest.permission.CAMERA)
//判斷多個權(quán)限
PkPermission.isGranted(
        arrayOf(
            android.Manifest.permission.ACCESS_FINE_LOCATION,
            android.Manifest.permission.ACCESS_COARSE_LOCATION,
            android.Manifest.permission.ACCESS_BACKGROUND_LOCATION
        )
    )
申請單個權(quán)限
            PkPermission.request(this, android.Manifest.permission.CAMERA, object : OnPermissionCallback {
                override fun onGranted(permissions: Array<String>) {
                    Log.e("TAG", "授予了權(quán)限:$permission")
                }

                override fun onDenied(permissions: Array<String>, never: Boolean) {
                    Log.e("TAG", "是否永久:$never 拒絕了${permission}權(quán)限")
                }

            })
申請多個權(quán)限
PkPermission.request(this, location, object : OnPermissionCallback {
        override fun onGranted(permissions: Array<String>) {
            //權(quán)限被授予了
        }

        override fun onDenied(permissions: Array<String>, never: Boolean) {
            if (never) {
                //權(quán)限被永久拒絕了
            } else {
                //權(quán)限第一次被拒絕
            }
        }
    })
跳轉(zhuǎn)app設(shè)置界面
PkPermission.toAppSetting(this@MainActivity)

一點點知識

shouldShowRequestPermissionRationale
  • 第一次請求時為false
  • 第一次請求被禁止,但未選擇[不再提醒]為true
  • 允許權(quán)限后為false
  • 第二次請求被禁止為false/禁止時選擇了不再提示為false
申請單個權(quán)限
隱私相關(guān)
  • 現(xiàn)在工信部查的越來越嚴(yán),關(guān)于權(quán)限這里,建議大家就是最小化,盡可能不要一個功能申請幾個權(quán)限組,保證一個功能申請一個權(quán)限
  • 定位權(quán)限比較特殊,10.0以后新增了一個ACCESS_BACKGROUND_LOCATION權(quán)限
 android 10.0
  1、ACCESS_BACKGROUND_LOCATION是Android 10新增的,10.0以前谷歌提供了兼容性方案,只要應(yīng)用申請了老的位置權(quán)限ACCESS_FINE_LOCATION或者ACCESS_COARSE_LOCATION,會默認(rèn)請求ACCESS_BACKGROUND_LOCATION權(quán)限
  2.大于10.0 如果應(yīng)用必須要始終定位,可以只申請ACCESS_BACKGROUND_LOCATION即可;如果應(yīng)用只需要申請前臺定位,則只需要申請老的定位權(quán)限即可
 android 11.0
  1.先申請前臺位置信息訪問權(quán)限
  2.在申請后臺位置信息訪問權(quán)限,引導(dǎo)用戶到設(shè)置中進(jìn)行授予
 android 12.0
  1.Android 12 或更高版本為目標(biāo)平臺的應(yīng)用時,用戶可以請求應(yīng)用只能訪問大致位置信息
  2.請求 ACCESS_FINE_LOCATION運(yùn)行時權(quán)限,您還必須請求 ACCESS_COARSE_LOCATION權(quán)限。不要單獨申請ACCESS_FINE_LOCATION運(yùn)行時權(quán)限
  • 我項目目前是對定位進(jìn)行了相關(guān)處理,大家可以放心使用,不需要做額外的處理
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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