首先注意一点:在清单文件内没有进行申明的权限进行动态申请时,并不会弹窗
确保需要申请的权限已经在清单文件中申明以后,就可以根据相应的功能进行申请:
该博客只涉及使用Google提供的官方库进行处理
首先在app的构建文件中导入
implementation ‘pub.devrel:easypermissions:1.0.1’
然后开始编辑动态申请的权限工具类
class PermissionUtils(var activity: Activity, var callback: CallBackInterface) : EasyPermissions.PermissionCallbacks {
override fun onPermissionsDenied(requestCode: Int, perms: MutableList<String>?) {
if (EasyPermissions.somePermissionPermanentlyDenied(activity, perms!!)) {
AppSettingsDialog.Builder(activity).build().show()
}else{
callback.success()
}
}
override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>?) {
if (callback != null) {
callback.success()
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
//将请求结果传递EasyPermission库处理
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
}
fun requestPermission(perms: Array<String>) {
var check = PermissionManager.checkPermission(activity, perms)
if (!check) {
PermissionManager.requestPermission(activity, "为了功能正常使用,请允许以下权限", 1000, perms)
}else{
callback.success()
}
}
}
CallBackInterface只是为了异步交互而接入的接口,里面的方法就俩,一个success 一个erro
manage里面的内容是调用google插件的内容
object PermissionManager {
fun checkPermission(context: Activity, perms: Array<String>): Boolean {
return EasyPermissions.hasPermissions(context, *perms)
}
/**
* 请求权限
* @param context
*/
fun requestPermission(context: Activity, tip: String, requestCode: Int, perms: Array<String>) {
EasyPermissions.requestPermissions(context, tip, requestCode, *perms)
}
}
相应权限的调用如此实现,比如:我需要申请一个定位权限,需要在该activity内接入CallBackInterface接口,然后传入utils便可:
PermissionUtils(this,this).requestPermission(arrayOf(“android.permission.ACCESS_FINE_LOCATION”,
“android.permission.ACCESS_COARSE_LOCATION”))