安卓权限申请利器-基于PermissonX封装

推荐大神–众所周知的郭神

注意Android13权限细化后申请流程

1、封装权限申请工具

object PermissionUtils {

   val ACTIVITY_GRANTED = 1
   val FRAGMENT_GRANTED = 2
   val ACTIVITY_DENIED = 3
   val FRAGMENT_DENIED = 4

   /**
    * 申请权限
    */
   fun getPermissions (activity: FragmentActivity?, fragment: Fragment?, permissions: List<String>) {
      val msg = Message()
      val bundle = Bundle()
      if (activity != null) {
         PermissionX.init(activity)
            .permissions(permissions)
            .onExplainRequestReason { scope, deniedList ->
               scope.showRequestReasonDialog(
                  deniedList,
                  "需要您同意以下权限才能正常使用",
                  "确认",
                  "取消"
               )
            }
            .onForwardToSettings { scope, deniedList ->
               scope.showForwardToSettingsDialog(
                  deniedList,
                  "为保障软件运行,您需手动开启必要的权限",
                  "确认",
                  "取消"
               )
            }
            .request { allGranted, grantedList, deniedList ->
               if (allGranted) {
                  msg.what = ACTIVITY_GRANTED
                  bundle.putStringArray("grantedList",grantedList.toTypedArray())

               } else {
                  msg.what = ACTIVITY_DENIED
                  bundle.putStringArray("deniedList",deniedList.toTypedArray())

               }
               bundle.putBoolean("allGranted",allGranted)
               msg.data = bundle
               mHandler.sendMessage(msg)
            }
      } else if (fragment != null) {

         PermissionX.init(fragment)
            .permissions(permissions)
            .onExplainRequestReason { scope, deniedList ->
               scope.showRequestReasonDialog(
                  deniedList,
                  "为保障软件运行,需要您同意以下权限",
                  "确认",
                  "取消"
               )
            }
            .onForwardToSettings { scope, deniedList ->
               scope.showForwardToSettingsDialog(
                  deniedList,
                  "为保障软件运行,您需手动开启必要的权限",
                  "确认",
                  "取消"
               )
            }
            .request { allGranted, grantedList, deniedList ->

               if (allGranted) {
                  msg.what = FRAGMENT_GRANTED
                  bundle.putStringArray("grantedList",grantedList.toTypedArray())
                  LogUtils.debugInfo("fragment所有权限已获取:${grantedList}")
               } else {
                  val msg = Message()
                  msg.what = FRAGMENT_DENIED
                  bundle.putStringArray("deniedList",deniedList.toTypedArray())
               }
               bundle.putBoolean("allGranted",allGranted)
               msg.data = bundle
               mHandler.sendMessage(msg)
            }
      }
   }


   /**
    * 权限申请监听回调
    */
   var monPermissionListener: onPermissionListener? = null

   fun setOnPermissionListener(monPermissionListener: onPermissionListener?) {
      this.monPermissionListener = monPermissionListener
   }

   interface onPermissionListener {
      fun getResult(data: Bundle, tid: String)
   }

   @SuppressLint("HandlerLeak")
   var mHandler: Handler = object : Handler() {
      override fun handleMessage(msg: Message) {
         super.handleMessage(msg)
         when (msg.what) {
            ACTIVITY_GRANTED_RESULT ->{
               if (monPermissionListener != null) {
                  val result = msg.data
                  if (monPermissionListener != null) {
                    monPermissionListener?.getResult(result, "")
                  }
               }
            }
            FRAGMENT_GRANTED_RESULT ->{
               if (monPermissionListener != null) {
                  val result = msg.data
                  if (monPermissionListener != null) {
                     monPermissionListener?.getResult(result, "")
                  }
               }
            }
            ACTIVITY_DENIED_RESULT ->{
               if (monPermissionListener != null) {
                  val result = msg.data
                  if (monPermissionListener != null) {
                     monPermissionListener?.getResult(result, "")
                  }
               }
            }
            FRAGMENT_DENIED_RESULT->{
               if (monPermissionListener != null) {
                  val result = msg.data
                  if (monPermissionListener != null) {
                     monPermissionListener?.getResult(result, "")
                  }
               }
            }
            else->{}
         }
      }
   }

   var listPermission = mutableListOf<String>()

   /**
    * 检查权限
    */
   fun checkPermission(context: Context, permissions: List<String>) :List<String> {
      permissions.forEach {
         if (!PermissionX.isGranted(context, it)) {
            if (!listPermission.contains(it)) {
               listPermission.add(it)
            }
         }
      }
      return listPermission
   }
}

2、调用权限申请

val permissionList = mutableListOf<String>(
            Manifest.permission.CAMERA)
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            permissionList.add(Manifest.permission.READ_MEDIA_IMAGES)
            permissionList.add(Manifest.permission.READ_MEDIA_AUDIO)
            permissionList.add(Manifest.permission.READ_MEDIA_VIDEO)
         } else {
            permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE)
            permissionList.add(Manifest.permission.READ_EXTERNAL_STORAGE)
         }
         PermissionUtils.getPermissions(this@PDFPreviewActivity, null, permissionList)
         PermissionUtils.setOnPermissionListener(object : PermissionUtils.onPermissionListener {
            override fun getResult(data: Bundle, tid: String) {
               if (data.getBoolean("allGranted")) {
//                  获取权限后 想干的事情。。。。。
               }
            }
         })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值