📅  最后修改于: 2023-12-03 14:49:41.862000             🧑  作者: Mango
在 Android 中播放音频是一个常见的需求。在 Jetpack Compose 中,可以使用 MediaPlayer
实现音频的播放和控制。本文将介绍如何在 Jetpack Compose 应用中使用 MediaPlayer
播放音频,包括实现播放、暂停、停止和控制进度。
首先,需要在应用的 AndroidManifest.xml
文件中添加以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
这些权限可以允许应用读取和写入外部存储器上的音频文件。
通过以下代码可以实现播放音频文件:
import androidx.compose.runtime.*
import androidx.compose.ui.platform.LocalContext
import androidx.core.net.toUri
import android.media.MediaPlayer
import kotlinx.coroutines.*
/**
* 播放指定路径下的音频文件
*
* @param filePath 音频文件路径
* @param onCompletion 回调函数,播放完成时调用
*/
fun playAudio(filePath: String, onCompletion: () -> Unit) {
val mediaPlayer = MediaPlayer()
mediaPlayer.setDataSource(LocalContext.current, filePath.toUri())
mediaPlayer.setOnCompletionListener {
onCompletion()
mediaPlayer.release()
}
mediaPlayer.prepare()
mediaPlayer.start()
}
在 playAudio
函数中,我们创建了一个 MediaPlayer
实例,并为它设置音频文件路径和完成时回调函数。然后我们调用 prepare()
和 start()
方法开始播放音频。
为了保持应用的响应性,建议使用 Coroutine
将 playAudio
函数的调用置于后台线程中。
使用以下代码可以实现暂停和恢复音频播放:
fun pauseAudio() {
mediaPlayer?.apply {
if (isPlaying) {
pause()
}
}
}
fun resumeAudio() {
mediaPlayer?.apply {
if (!isPlaying) {
start()
}
}
}
在 pauseAudio
函数中,我们检查 MediaPlayer
是否在播放状态,如果是,则调用 pause()
方法暂停播放。
在 resumeAudio
函数中,我们检查 MediaPlayer
是否在非播放状态,如果是,则调用 start()
方法恢复播放。
使用以下代码可以实现停止和重置音频播放:
fun stopAudio() {
mediaPlayer?.apply {
stop()
reset()
release()
}
mediaPlayer = null
}
在 stopAudio
函数中,我们调用 stop()
方法停止正在播放的音频,然后调用 reset()
方法将 MediaPlayer
返回到初始状态。最后调用 release()
释放资源。
使用以下代码可以实现控制音频进度:
fun setAudioProgress(progress: Int) {
mediaPlayer?.apply {
seekTo(progress)
}
}
@Composable
fun AudioPlayer() {
var playing by remember { mutableStateOf(false) }
var progress by remember { mutableStateOf(0) }
LaunchedEffect(playing) {
if (playing) {
playAudio(filePath) {
playing = false
}
} else {
pauseAudio()
}
}
Column {
// TODO: Add audio control buttons and progress bar
}
}
在 AudioPlayer
组件中,我们使用 remember
和 LaunchedEffect
将音频播放操作置于后台线程中,用布尔值 playing
和整数值 progress
来记录播放状态和进度值。
然后,在组件中添加音频控制按钮和进度条即可实现对音频的实时控制。
在 Jetpack Compose 应用中使用 MediaPlayer
播放音频是一项非常简单的任务。本文介绍了如何使用 MediaPlayer
实现音频的播放、暂停、停止和控制进度,希望对大家有所帮助。