Android RxPermission的使用

RxPermission 权限的使用

  1. 导包 implementation ‘com.github.tbruyelle:rxpermissions:0.10.2’
  2. 使用方法
  RxPermissions(this).requestEachCombined(
                    Manifest.permission.CAMERA,
                    Manifest.permission.READ_PHONE_STATE,
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
                )
                    .subscribe { permission ->
                        if (permission.granted) {
                            Toast.makeText(this,"授权成功",Toast.LENGTH_SHORT).show()
                            // 授权成功
                        } else if (permission.shouldShowRequestPermissionRationale) {
                            Toast.makeText(this,"用户拒绝授权,但未勾选“不再询问”",Toast.LENGTH_SHORT).show()
                            // 用户拒绝授权,但未勾选“不再询问”
                        } else {
                            Toast.makeText(this,"且勾选了“不再询问”",Toast.LENGTH_SHORT).show()
                            // 用户拒绝授权,且勾选了“不再询问”
                        }
                    }
  1. 权限检查工具类: PermissionsUtils
 
import android.app.Activity
import android.content.pm.PackageManager
import android.os.Build 
object PermissionsUtils {
    // 查看权限是否已申请
    /**
     * 查看权限是否已申请
     * true 有权限  false 至少一个没有权限
     * @param context
     * @param permissions 权限集合或单个权限
     * @return
     */
    @JvmStatic
    fun checkPermissions(context: Activity, vararg permissions: String): Boolean {
        var hasPermission = true
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            for (permission in permissions) {
                if (isPermission(context, permission)) {
                    hasPermission = false
                    break
                }
            }
        }
        return hasPermission
    }

    /**
     * 是否有权限 true 没有权限 false 有权限
     * @param context
     * @param permission
     * @return
     */
    private fun isPermission(context: Activity, permission: String): Boolean {
        val pm = context.packageManager
        return PackageManager.PERMISSION_DENIED ==
                pm.checkPermission(permission, context.packageName)
    }
}
  1. 可自定义封装成相关工具类
 
import android.annotation.SuppressLint
import android.widget.Toast
import androidx.fragment.app.FragmentActivity
import com.qzl.base_tool.operate.StringHelper
import com.tbruyelle.rxpermissions2.Permission
import com.tbruyelle.rxpermissions2.RxPermissions

 
object PermissionShowUtil {
    @JvmStatic
    @SuppressLint("CheckResult")
    fun requestPermissions(model: String, activity: FragmentActivity?, onPermissionListener: OnPermissionListener, menuName:String? = "应用更新功能") {
        val tempMap = PermissionInfo.getMap(model)
        val result = tempMap[PermissionInfo.PERMISSIONKEY] as Array<String>
        //先检查是否有权限,
        if (activity?.let { PermissionsLogUtils.checkPermissions(it, *result) } == true) {
            onPermissionListener.onGranted()
        } else {
            //弹框提示请求权限
            PermissionTipDialog(activity!!, activity)
                    .showDialog(String.format(StringHelper.toString(tempMap[PermissionInfo.PERMISSIONTipKEY]),menuName,menuName))
                    .setListener(object : PermissionTipDialog.ClickListener {
                        override fun cancelListener() {
                            onPermissionListener.onShouldShow()
                        }

                        override fun sureListener() {

                            RxPermissions(activity).requestEachCombined(*result)
                                    .subscribe { permission: Permission ->
                                        when {
                                            permission.granted -> {
                                                onPermissionListener.onGranted()
                                            }
                                            permission.shouldShowRequestPermissionRationale -> {
                                                Toast.makeText(activity,                      String.format(StringHelper.toString(tempMap[PermissionInfo.REFUSEDMSG])
                                                ,menuName,menuName), Toast.LENGTH_LONG).show()
                                                onPermissionListener.onShouldShow()
                                            }
                                            else -> {
                                                //Toast.makeText(activity, StringHelper.toString(tempMap[PermissionInfo.SHOULDSHOWMSG]), Toast.LENGTH_LONG).show()
                                                PermissionTipDialog(activity, activity)
                                                        .showDialog(String.format(StringHelper.toString(tempMap[PermissionInfo.SHOULDSHOWMSG]),menuName,menuName))
                                                        .setYesText("打开")
                                                        .setListener(object : PermissionTipDialog.ClickListener {
                                                            override fun cancelListener() {}
                                                            override fun sureListener() {
                                                                PermissionSettingUtils.openSettingPage(activity)
                                                            }
                                                        })
                                            }
                                        }
                                    }
                        }
                    })
        }
    }

    interface OnPermissionListener {
        fun onGranted()
        fun onShouldShow()
    }
} 
 
  1. 封装工具类调用
      调用执行
   /*PermissionShowUtil.requestPermissions(PermissionInfo.LOCATION, this, object :
                    PermissionShowUtil.OnPermissionListener {
                    override fun onGranted() {
                        MyToast.showShort("通过")
                    } 
                    override fun onShouldShow() {
                        MyToast.showShort("拒绝")
                    }
                })*/
  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值