gpt4 book ai didi

Android 权限助手函数

转载 作者:行者123 更新时间:2023-12-05 00:02:08 26 4
gpt4 key购买 nike

我有一项需要相机许可的 Activity 。
可以从应用程序中的多个用户可配置位置调用此 Activity 。
基本原理对话框和权限对话框本身应在 Activity 打开之前显示。
idea
现在我正在尝试在某种扩展功能中处理这些对话框。

fun handlePermissions(context: Context, required_permissions: Array<String>, activity: FragmentActivity?, fragment: Fragment?): Boolean {
var isGranted = allPermissionsGranted(context, required_permissions)
if (!isGranted) {
//null here is where I used to pass my listener which was the calling fragment previously that implemented an interface
val dialog = DialogPermissionFragment(null, DialogPermissionFragment.PermissionType.QR)


activity?.supportFragmentManager?.let { dialog.show(it, "") }

//get result from dialog? how?

//if accepted launch actual permission request
fragment?.registerForActivityResult(ActivityResultContracts.RequestPermission()) { success ->
isGranted = success
}?.launch(android.Manifest.permission.CAMERA)
}
return isGranted
}
但是我无法从基本原理/解释对话框中获取对话结果。
到目前为止,我的研究使我可能使用更高阶的函数,将函数变量传递给对话框 fragment ,该 fragment 将 bool 值返回给辅助函数。但我绝对不确定这是否正确。
我认为使用我自己的代码会更干净,开销更少,当使用像 eazy-permissions 这样的框架时,我可以更轻松地实现这一点吗? (Dexter 仍然值得推荐,因为它不再处于开发阶段)
这甚至是我想要在这里实现的可行的事情吗?

最佳答案

我已经实现并且似乎可行的一种方法是:
类(class) PermissionsHelper

class PermissionsHelper(private val activity: Activity) {

fun requestPermissionsFromDevice(
arrayPermissions: Array<String>, permissionsResultInterface: PermissionsResultInterface
) {
setPermissionResultInterface(permissionsResultInterface)
getMyPermissionRequestActivity().launch(arrayPermissions)
}

fun checkPermissionsFromDevice(permission: String): Boolean {
return ContextCompat.checkSelfPermission(activity, permission) ==
PackageManager.PERMISSION_GRANTED
}

}
类(class) PermissionsResultInterface帮助类能够与 Activity 进行通信。
interface PermissionsResultInterface {
fun onPermissionFinishResult(permissions: MutableMap<String, Boolean>)
}
使用这种方法从 app 目录中删除所有文件:
private fun clearFiles(firstCall: Boolean = false) {
if (verifyStoragePermissions(firstCall)) {
val dir = File(getExternalFilesDir(null).toString())
removeFileOrDirectory(dir)
Toast.makeText(
applicationContext,
resources.getString(R.string.done),
Toast.LENGTH_SHORT
).show()
}
}

private fun verifyStoragePermissions(firstCall: Boolean = false): Boolean {
val arrayListPermissions = arrayOf(
android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE
)
for (permission in arrayListPermissions) {
if (!PermissionsHelper(this).checkPermissionsFromDevice(permission)) {
if (firstCall) PermissionsHelper(this)
.requestPermissionsFromDevice(arrayListPermissions, this)
else PermissionsDialogs(this).showPermissionsErrorDialog()
return false
}
}
return true
}

override fun onPermissionFinishResult(permissions: MutableMap<String, Boolean>) {
clearFiles()
}
使用这种方法,您可以调用权限助手并使用结果界面,在用户的每个回答之后,决定您是否仍然需要调用权限或向他显示一个对话框。
如果您需要任何帮助,请随时与我联系。

关于Android 权限助手函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70694649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com