在Andriod Studio中使用MediaPlayer时音频不会停止播放

问题描述 投票:0回答:1

我开发了一个简单的 Android 应用程序,您可以使用

MediaPlayer
播放和停止音频。但是,音频不会根据要求停止。

这是该应用程序的细分。一列中有两个按钮。第一个按钮准备并播放音频文件。第二个停止播放音频文件。

这是代码

MainActivity

// Sound Effect Uri
val soundEffectUri = "android.resource://com.example.audiotest/raw/sound_effect"

// App Layout
Column(
        modifier = Modifier.fillMaxSize(),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {

        // Button That Plays Audio
    Button(onClick = { AudioClass(this).play() })
        { Text(text = "Start") }

        // Button That Stops Audio
        Button(onClick = { AudioClass(this).stop() })
        { Text(text = "Stop") }

MediaPlayer
的逻辑保存在一个单独的类中。在这里

// Class That Holds MediaPlay Logic
class AudioClass(context: Context) {

    // Instance Of MediaPlayer
    val mediaPlayer = MediaPlayer()

    // MediaPlayer Attributes
    init {
        mediaPlayer.setDataSource(context, Uri.parse(soundEffectUri))
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM)
        mediaPlayer.isLooping = true
    }
 
    // Function That Prepares And Starts Audio
    fun play() {
        mediaPlayer.prepare()
        mediaPlayer.start()
    }

    // Function That Stops Audio
    fun stop() {
        mediaPlayer.stop()
    }

}

仅当

MediaPlayer
Activity
Composable
之外初始化时,才会出现音频不停止的问题。我想全局初始化它,以便我可以在需要的地方使用它。

这是每当我按下停止音频的按钮时日志猫会说的话。

2024-09-23 19:10:55.088 22661-22661 MediaPlayerNative com.example.audiotest E stop called in state 2, mPlayer(0xd25cb1e0)

2024-09-23 19:10:55.088 22661-22661 MediaPlayerNative com.example.audiotest E error (-38, 0)

2024-09-23 19:10:55.149 22661-22661 MediaPlayer com.example.audiotest E Error (-38,0)

感谢您花时间阅读这个问题。

android android-studio android-jetpack-compose android-mediaplayer
1个回答
0
投票

MediaPlayer的状态有: 1 空闲 2 初始化 3 准备 4 准备 5 开始 6 暂停 7 停止 8 播放完成 9 结束 10 错误 当状态为2(Initialized)时不能调用Stop操作 stop() 方法只能在 MediaPlayer 处于 Started、Paused 或 PlaybackCompleted 状态时调用

根据以上逻辑进行检查。

© www.soinside.com 2019 - 2024. All rights reserved.