我开发了一个简单的 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)
感谢您花时间阅读这个问题。
MediaPlayer的状态有: 1 空闲 2 初始化 3 准备 4 准备 5 开始 6 暂停 7 停止 8 播放完成 9 结束 10 错误 当状态为2(Initialized)时不能调用Stop操作 stop() 方法只能在 MediaPlayer 处于 Started、Paused 或 PlaybackCompleted 状态时调用
根据以上逻辑进行检查。