android手机权限动态申请的那些坑(附带kotlin的动态申请代码)

首先注意一点:在清单文件内没有进行申明的权限进行动态申请时,并不会弹窗

确保需要申请的权限已经在清单文件中申明以后,就可以根据相应的功能进行申请:
该博客只涉及使用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”))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值