以拍照功能为例
添加权限代码
首先在该位置添加以下代码。
<!-- 前后摄像头 -->
<uses-feature android:name="android.hardware.camera.any" />
<!-- 后摄像头 -->
<uses-permission android:name="android.permission.CAMERA"/>
引入权限管理插件
implementation 'com.guolindev.permissionx:permissionx:1.6.4'
然后:Sync Now
新建一个权限管理文件。
吧以下代码复制进去。使用方式在最下方。
代码
import android.content.pm.PackageManager
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import com.permissionx.guolindev.PermissionX
import com.permissionx.guolindev.dialog.RationaleDialog
/**
*校验权限是否授权
* @param permission 需要校验的权限
* @return true 已授权,false未授权
*
* */
fun FragmentActivity.checkPermissionExt(permission: String): Boolean {
return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED
}
/**
*activity中请求权限封装
* @param permissions 权限组
* @param allGranted 权限是否授权回调, true授权,false 未授权
* explainReasonBeforeRequest
* */
fun FragmentActivity.requestPermissionExt(
vararg permissions: String,
allGranted: (Boolean) -> Unit
) {
PermissionX.init(this).permissions(permissions.toList()).request { isGranted, _, _ ->
allGranted(isGranted)
}
}
/**
*activity中请求权限封装
* @param permissions 权限组
* @param allGranted 权限是否授权回调, true授权,false 未授权
* */
fun FragmentActivity.requestPermissionExt(
permissions: List<String>,
allGranted: (Boolean) -> Unit
) {
PermissionX.init(this).permissions(permissions).request { isGranted, _, _ ->
allGranted(isGranted)
}
}
/**
*activity中请求权限封装
* @param permissions 权限组
* @param allGranted 权限是否授权回调, true授权,false 未授权
*@param forwardToSettings 跳转设置
* */
fun FragmentActivity.requestPermissionExt(
permissions: List<String>,
allGranted: (Boolean) -> Unit,
forwardToSettings: () -> Unit
) {
PermissionX.init(this).permissions(permissions).onForwardToSettings { _, _ ->
forwardToSettings()
}.request { isGranted, _, _ ->
allGranted(isGranted)
}
}
/**
*activity中请求权限封装
* @param permissions 权限组
* @param allGranted 权限是否授权回调, true授权,false 未授权
* @param explainReasonBeforeRequest 是否在申请权限前弹出说明框 true弹出,false不弹出
* @param dialog 授权说明弹框
* @param forwardToSettingsDialog 跳转设置弹框
* */
fun FragmentActivity.requestPermissionExt(
vararg permissions: String,
explainReasonBeforeRequest: Boolean,
dialog: RationaleDialog,
forwardToSettingsDialog: RationaleDialog,
allGranted: (Boolean) -> Unit
) {
val permissionX = PermissionX.init(this).permissions(permissions.toList())
permissionX.explainReasonBeforeRequest = explainReasonBeforeRequest
permissionX.onExplainRequestReason { scope, _ ->
scope.showRequestReasonDialog(dialog)
}
permissionX.onForwardToSettings { scope, _ ->
scope.showForwardToSettingsDialog(forwardToSettingsDialog)
}
permissionX.request { isGranted, _, _ ->
allGranted(isGranted)
}
}
/**
*校验权限是否授权
* @param permission 需要校验的权限
* @return true 已授权,false未授权
*
* */
fun Fragment.checkPermissionExt(permission: String): Boolean {
return ContextCompat.checkSelfPermission(
requireContext(),
permission
) == PackageManager.PERMISSION_GRANTED
}
/**
*fragment中请求权限封装
* @param permissions 权限组
* @param allGranted 权限是否授权回调, true授权,false 未授权
* explainReasonBeforeRequest
* */
fun Fragment.requestPermissionExt(
vararg permissions: String,
allGranted: (Boolean) -> Unit
) {
PermissionX.init(this).permissions(permissions.toList()).explainReasonBeforeRequest()
.request { isGranted, _, _ ->
allGranted(isGranted)
}
}
/**
*fragment中请求权限封装
* @param permissions 权限组
* @param allGranted 权限是否授权回调, true授权,false 未授权
* explainReasonBeforeRequest
* */
fun Fragment.requestPermissionExt(
permissions: List<String>,
allGranted: (Boolean) -> Unit
) {
PermissionX.init(this).permissions(permissions).explainReasonBeforeRequest()
.request { isGranted, _, _ ->
allGranted(isGranted)
}
}
/**
*activity中请求权限封装
* @param permissions 权限组
* @param allGranted 权限是否授权回调, true授权,false 未授权
* @param explainReasonBeforeRequest 是否在申请权限前弹出说明框 true弹出,false不弹出
* @param dialog 授权说明弹框
* @param forwardToSettingsDialog 跳转设置弹框
* */
fun Fragment.requestPermissionExt(
vararg permissions: String,
explainReasonBeforeRequest: Boolean,
dialog: RationaleDialog,
forwardToSettingsDialog: RationaleDialog,
allGranted: (Boolean) -> Unit
) {
val permissionX = PermissionX.init(this).permissions(permissions.toList())
permissionX.explainReasonBeforeRequest = explainReasonBeforeRequest
permissionX.onExplainRequestReason { scope, _ ->
scope.showRequestReasonDialog(dialog)
}
permissionX.onForwardToSettings { scope, _ ->
scope.showForwardToSettingsDialog(forwardToSettingsDialog)
}
permissionX.request { isGranted, _, _ ->
allGranted(isGranted)
}
}
代码使用方式
requestPermissionExt(
Manifest.permission.CAMERA,
){ it ->
if (it) {
//授权成功,或者已授权
} else {
Toast.makeText(context,
"Permissions not granted by the user.",
Toast.LENGTH_SHORT).show()
}
}
匆忙之前只学了下怎么获取权限,关于安卓权限管理的一些机制,后续再补充。