未解决的参考:android MediaPlayer (kotlin) 中的上下文

Posted

技术标签:

【中文标题】未解决的参考:android MediaPlayer (kotlin) 中的上下文【英文标题】:Unresolved reference: Context in android MediaPlayer (kotlin) 【发布时间】:2021-02-18 03:18:32 【问题描述】:

我创建这个函数是为了让按钮在点击时发出声音,声音文件是位于raw/button_click.mp3目录下的mp3。

fun play_sound(which_one:Int) 
    if(which_one == 1)
        val mediaPlayer:MediaPlayer? = MediaPlayer.create(Context,R.raw.button_click)
        mediaPlayer?.start()


但是当我运行它时出现以下错误Unresolved reference: Context

我应该如何编辑我的代码来解决这个问题?

顺便说一句,暂时忽略 if 语句,在这个开发阶段它总是正确的。

【问题讨论】:

【参考方案1】:

未解决的参考:上下文

您收到以下错误,因为您使用 Class 而不是变量名作为参数。

fun play_sound(which_one:Int) 
    if(which_one == 1) 
        val mediaPlayer:MediaPlayer? = MediaPlayer.create(Context,R.raw.button_click)
        mediaPlayer?.start()
    

android 中也有不同种类的上下文

您有自己的应用程序、活动和片段上下文,它们也与不同的生命周期相关联,具体取决于您使用的上下文

如果此函数是您的 Activity 的成员。

fun play_sound(which_one:Int) 
    if(which_one == 1) 
        val mediaPlayer:MediaPlayer? = MediaPlayer.create(this@YourActivityHere,R.raw.button_click)
        mediaPlayer?.start()
    

片段

fun play_sound(which_one:Int) 
    if(which_one == 1) 
        val mediaPlayer:MediaPlayer? = MediaPlayer.create(requireContext(),R.raw.button_click)
        mediaPlayer?.start()
    

【讨论】:

【参考方案2】:

将正确的活动Context 传递给此方法

fun play_sound(ctx:Context, which_one:Int) 
    if(which_one == 1)
        val mediaPlayer:MediaPlayer? = MediaPlayer.create(ctx, R.raw.button_click)
        mediaPlayer?.start()
    

【讨论】:

同样的事情 ctx 不起作用它输出相同的错误信息 @Adelgamer 您是否将其作为参数添加到您的方法中? 如果你从Activity开始这个方法,那么你可以通过this作为Activity是一个Context实例(extends it)

以上是关于未解决的参考:android MediaPlayer (kotlin) 中的上下文的主要内容,如果未能解决你的问题,请参考以下文章

`未解决的参考:新的 Flutter 项目上的 android`

未解决的参考:viewModelScope - Kotlin Android

Android中的Firebase:firestore是未解决的参考

未解决的参考匕首 2 + kotlin + android gradle

未解决的参考@HiltAndroidApp 或 Android 中的任何其他 Hilt 注释

Android Kotlin:错误未解决参考:DaggerAppComponent