RxPermission 权限的使用
- 导包 implementation ‘com.github.tbruyelle:rxpermissions:0.10.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()
// 用户拒绝授权,且勾选了“不再询问”
}
}
- 权限检查工具类: PermissionsUtils
import android.app.Activity
import android.content.pm.PackageManager
import android.os.Build
object PermissionsUtils {
@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
}
private fun isPermission(context: Activity, permission: String): Boolean {
val pm = context.packageManager
return PackageManager.PERMISSION_DENIED ==
pm.checkPermission(permission, context.packageName)
}
}
- 可自定义封装成相关工具类
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 -> {
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()
}
}
- 封装工具类调用
调用执行