如何检查Android运行时权限/从LibGdx核心模块获取Android当前活动?
我正在学习/开发一款Android/Kotlin/游戏,需要cmusphinx的帮助 现在我正努力在运行时检查权限。我已经编写了一个从core到android的代码 执行“setupPermissions”功能时,日志显示此错误(代码如下): 我想这是因为我没有得到当前的活动。 我找不到解释这一点的教程 如何让当前活动检查Android上的权限如何检查Android运行时权限/从LibGdx核心模块获取Android当前活动?,android,kotlin,libgdx,Android,Kotlin,Libgdx,我正在学习/开发一款Android/Kotlin/游戏,需要cmusphinx的帮助 现在我正努力在运行时检查权限。我已经编写了一个从core到android的代码 执行“setupPermissions”功能时,日志显示此错误(代码如下): 我想这是因为我没有得到当前的活动。 我找不到解释这一点的教程 如何让当前活动检查Android上的权限 代码如下: 核心模块: package com.folotera.controller interface PermissionManager {
代码如下: 核心模块:
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)
}
}
您不应该自己实例化活动或上下文。Android为您提供了上下文。如果您只是实例化一个活动,那么它是一个无用的对象,并且肯定没有您的应用程序与操作系统的上下文 您的接口实现将需要对实际活动的引用,如下所示:
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)
然后将其传递给构造函数,如下所示:
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)
星星是为了突出文本。既然核心模块无法使用Activity类,我应该如何编写PermissionManager接口构造函数?正如上面所示。PermissionManager的AndroidPermissionChecker实现仅在Android模块中,因此它可以自由引用活动。核心模块中的界面声明不需要更改。请注意,在授予权限后,您仍需要回拨到游戏。您的AndroidLauncher需要实现ActivityCompat.OnRequestPermissionsResultCallback,在那里,当它收到肯定的结果时,它必须调用游戏中的某个函数,告诉它权限现在已授予。因此,您需要制作一个
lateinit val游戏:YourGame
,该游戏存储对您的游戏的引用,并将其传递给initialize
。它成功了。非常感谢你。我发现libgdx屏幕不是活动。这也帮助我理解了这个问题。“游戏的不同屏幕在libgdx中实现,而不是作为单独的活动。”