前言

  • 在以前我们一直用的是ActivityCompat.requestPermissions()去申请权限和重写onRequestPermissionsResult()回调方法,对授权结果进行判断,执行后续操作。
  • 但是目前这个方法已经过时了,在网上找了一圈,大部分都是老方法,于是就决定自己重写一套权限框架。
  • 项目地址:github.com/Peakmain/Ba…

使用文档

怎样使用

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'
	}
是否授予权限
//判断单个权限
PkPermission.isGranted(android.Manifest.permission.CAMERA)
//判断多个权限
PkPermission.isGranted(
        arrayOf(
            android.Manifest.permission.ACCESS_FINE_LOCATION,
            android.Manifest.permission.ACCESS_COARSE_LOCATION,
            android.Manifest.permission.ACCESS_BACKGROUND_LOCATION
        )
    )
申请单个权限
            PkPermission.request(this, android.Manifest.permission.CAMERA, object : OnPermissionCallback {
                override fun onGranted(permissions: Array<String>) {
                    Log.e("TAG", "授予了权限:$permission")
                }
                override fun onDenied(permissions: Array<String>, never: Boolean) {
                    Log.e("TAG", "是否永久:$never 拒绝了${permission}权限")
                }
            })
申请多个权限
PkPermission.request(this, location, object : OnPermissionCallback {
        override fun onGranted(permissions: Array<String>) {
            //权限被授予了
        }
        override fun onDenied(permissions: Array<String>, never: Boolean) {
            if (never) {
                //权限被永久拒绝了
            } else {
                //权限第一次被拒绝
            }
        }
    })
跳转app设置界面
PkPermission.toAppSetting(this@MainActivity)

一点点知识

shouldShowRequestPermissionRationale
  • 第一次请求时为false
  • 第一次请求被禁止,但未选择[不再提醒]为true
  • 允许权限后为false
  • 第二次请求被禁止为false/禁止时选择了不再提示为false
申请单个权限
  • Google的代码示例:github.com/android/per…
    Activity Results API 实现权限封装库

Activity Results API 实现权限封装库

隐私相关
  • 现在工信部查的越来越严,关于权限这里,建议大家就是最小化,尽可能不要一个功能申请几个权限组,保证一个功能申请一个权限
  • 定位权限比较特殊,10.0以后新增了一个ACCESS_BACKGROUND_LOCATION权限
 android 10.0
  1、ACCESS_BACKGROUND_LOCATION是Android 10新增的,10.0以前谷歌提供了兼容性方案,只要应用申请了老的位置权限ACCESS_FINE_LOCATION或者ACCESS_COARSE_LOCATION,会默认请求ACCESS_BACKGROUND_LOCATION权限
  2.大于10.0 如果应用必须要始终定位,可以只申请ACCESS_BACKGROUND_LOCATION即可;如果应用只需要申请前台定位,则只需要申请老的定位权限即可
 android 11.0
  1.先申请前台位置信息访问权限
  2.在申请后台位置信息访问权限,引导用户到设置中进行授予
 android 12.0
  1.Android 12 或更高版本为目标平台的应用时,用户可以请求应用只能访问大致位置信息
  2.请求 ACCESS_FINE_LOCATION运行时权限,您还必须请求 ACCESS_COARSE_LOCATION权限。不要单独申请ACCESS_FINE_LOCATION运行时权限
  • 我项目目前是对定位进行了相关处理,大家可以放心使用,不需要做额外的处理