提问人:Karthik 提问时间:6/23/2023 更新时间:6/23/2023 访问量:107
类内的 onRequestPermissionsResult 在 android jetpack compose 中不起作用
onRequestPermissionsResult inside a class is not working in android jetpack compose
问:
嗨,我是 android 和 jetpack compose 的新手。 我有一个类“PermissionHandler”来处理 android 应用程序的权限请求。它由“AppCompatActivity”类扩展。我可以请求许可。但是,在选择选项时,不会调用被覆盖的函数“onRequestPermissionsResult”。
下面是课程>>
class PermissionHandler(context: Activity): AppCompatActivity(){
private val context: Activity = context
private lateinit var permissionClass: String
private lateinit var alertBody: String
private lateinit var toastMessage: String
companion object {
const val PERMISSION_REQ_CODE = 100
}
private fun checkPermission(): Boolean{
return (ContextCompat.checkSelfPermission(context, permissionClass) == PackageManager.PERMISSION_GRANTED)
}
private fun checkPermissionRationale(): Boolean{
return ActivityCompat.shouldShowRequestPermissionRationale(context, permissionClass)
}
private fun requestPermission(){
ActivityCompat.requestPermissions(context, arrayOf(permissionClass), PERMISSION_REQ_CODE )
}
@Composable
fun ShowPermissionExplanation(){
val alertInput = remember { mutableStateOf(false) }
if(!alertInput.value) {
AlertExplanation(
title = "Permission Needed",
body = alertBody
) { value -> alertInput.value = value }
} else {
requestPermission()
}
}
@Composable
fun CheckAndReqPermission(
permissionName: String,
permissionValue: (Boolean) -> Unit
){
permissionClass = permissionName
alertBody = "The app requires ${permissionClass.split('.')[2]} permission for particular feature to work as expected"
toastMessage = "Please allow ${permissionClass.split('.')[2]} permission to the APP."
if(checkPermission()){
permissionValue(true)
} else if (checkPermissionRationale()){
ShowPermissionExplanation()
}else{
requestPermission()
Toast.makeText(context, toastMessage, Toast.LENGTH_SHORT).show()
permissionValue(false)
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
Log.d("permission result", grantResults.toString())
Log.d("permission result", "checking Log if the callback is happedning or not")
}
}
类对象只是从可组合的函数中调用的>>
@Composable
fun CheckBluetoothPermission(context: Activity) {
val permissionValue = remember{ mutableStateOf(false) }
val permissionHandler = PermissionHandler(context = context)
permissionHandler.CheckAndReqPermission(AppPermission.ACCESS_FINE_LOCATION.permission) { value ->
permissionValue.value = value
}
答:
1赞
Hossein Shahmohammadi
6/23/2023
#1
您应该使用 rememberLauncherForActivityResult 及其回调来对“onRequestPermissionsResult”的相同功能
我认为这个答案能够帮助您:如何使用 Jetpack Compose 请求权限?
评论