Android Kotlin MediaPlayer的简单用法

Android Kotlin MediaPlayer的简单用法,android,kotlin,android-mediaplayer,Android,Kotlin,Android Mediaplayer,我是Kotlin的新手,正在尝试制作一个简单的AudioManager(包装MediaPlayer) 我想让全班播放音频 这是我的班级: package com.example.myappname import android.media.MediaPlayer interface AudioManagerInput { fun startSound() fun stopSound() } class AudioManager: AudioManagerInput {

我是Kotlin的新手,正在尝试制作一个简单的AudioManager(包装MediaPlayer)

我想让全班播放音频

这是我的班级:

package com.example.myappname

import android.media.MediaPlayer

interface AudioManagerInput {
    fun startSound()
    fun stopSound()
}

class AudioManager: AudioManagerInput {

    // Instance variables

    private var mediaPlayer: MediaPlayer? = null

    // AudioManagerInput methods

    override fun startSound() {
        if (mediaPlayer == null) {
            mediaPlayer = MediaPlayer()
            mediaPlayer?.setDataSource("R.raw.songone") // ???
        }
        mediaPlayer?.start()
    }

    override fun stopSound() {
        mediaPlayer?.stop()
    }
}
我在设置歌曲时遇到问题

我想加载一个本地文件
R.raw.songone
,它是一个位于
res/raw
中的.wav文件

如何将字符串获取到其路径


我浏览过一些教程,这些教程包含了使用MediaPlayer的其他解决方案,但遇到了不知道要导入什么、无法调用
创建
、或者找不到
上下文
(无论是什么)等问题。

将上下文导入AudioManager:

import android.content.Context
修改类或其方法签名,如下所示:

class AudioManager(private val context: Context): AudioManagerInput
现在我们可以将上下文传递给
MediaPlayer

override fun startSound() {
    if (mediaPlayer == null) {
        mediaPlayer = MediaPlayer.create(context, R.raw.yourSound);
    }
    mediaPlayer?.start()
}
要从活动初始化AudioManager,请执行以下操作:

var audioManager = AudioManager(this)

要手动访问
raw
文件:。

如何从调用类传入上下文
class MainActivity:AppCompatActivity()
AudioManager(this)
我以这种方式创建了这样一个对象,我的对象用GC清除了几秒钟,解决了对象保持静态和伴随对象{var mediaPlayer:mediaPlayer?=null}。仅供参考。这不是一个好方法,我不知道您是如何使用该对象的,从您的评论判断,我宁愿将其移动到前台服务。这将进入MainActivity.kt文件,还是单独的类/文件?