gpt4 book ai didi

android - 如何检查 Android 运行时权限/从 LibGdx 核心模块获取 Android 当前 Activity ?

转载 作者:行者123 更新时间:2023-11-29 18:26:41 25 4
gpt4 key购买 nike

我正在学习/开发 Android/Kotlin/Ktx需要 live speech recognizer 的游戏来自 cmusphinx。

现在我正在努力检查运行时的权限。我已经编码了 interface从核心到安卓。

在执行“setupPermissions”函数(代码如下)时,日志给我这个错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference

我想这是因为我没有得到当前的 Activity 。我找不到解释这个的教程。

如何获取当前 Activity 以检查 Android 上的权限?


代码如下:

核心模块:

package com.folotera.controller

interface PermissionManager {
fun checkPermissions()
}

安卓模块:

class AndroidPermissionChecker : PermissionManager {

private val RECORD_REQUEST_CODE = 101

override fun checkPermissions(){
setupPermissions()
}

private fun setupPermissions() {

val permission = ContextCompat.checkSelfPermission(Activity(),
Manifest.permission.RECORD_AUDIO)

if (permission != PackageManager.PERMISSION_GRANTED) {
Log.i("TAG", "Permission to record denied")
makeRequest()
}
}

private fun makeRequest() {
ActivityCompat.requestPermissions(Activity(),
arrayOf(Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE),
RECORD_REQUEST_CODE)
}
}

..

class AndroidLauncher : AndroidApplication() {
...
override fun onCreate(savedInstanceState: Bundle?) {
...
val config = AndroidApplicationConfiguration()
initialize(aGame(AndroidPermissionChecker()), config)
...
}

}

最佳答案

您永远不应该自己实例化 Activity 或 Context。 Android 为您提供上下文。如果您简单地实例化一个 Activity,它是一个无用的对象,并且肯定不具有您的应用程序与操作系统的上下文。

您的接口(interface)实现需要像这样引用实际的 Activity:

class AndroidPermissionChecker(private val activity: Activity) : PermissionManager {
//...

private fun makeRequest() {
ActivityCompat.requestPermissions(activity,
arrayOf(Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE),
RECORD_REQUEST_CODE)
}
}

然后像这样将它传递给构造函数:

initialize(aGame(AndroidPermissionChecker(this)), config)

关于android - 如何检查 Android 运行时权限/从 LibGdx 核心模块获取 Android 当前 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58542813/

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