播放assets文件中的音频文件
kotlin实现:
private var mediaPlayer: MediaPlayer? = null
/**
* 打开assets下的音乐mp3文件
*/
fun openAssetMusics(
mp3Name: String,
onPreparedListener: MediaPlayer.OnPreparedListener,
onCompletionListener: MediaPlayer.OnCompletionListener
) {
try {
mediaPlayer?.release()
mediaPlayer = null
val fd: AssetFileDescriptor =
this.requireContext().assets.openFd(mp3Name)
mediaPlayer = MediaPlayer()
mediaPlayer?.setDataSource(fd.fileDescriptor, fd.startOffset, fd.length)
mediaPlayer?.setOnPreparedListener(onPreparedListener)//音频准备完毕
mediaPlayer?.setOnCompletionListener(onCompletionListener)//音频播放完毕
mediaPlayer?.prepare()
mediaPlayer?.start()
} catch (e: Exception) {
e.printStackTrace()
}
}
使用示例:
openAssetMusics("jiayou.mp3",
{
//TODO 开始播放
}) {
//TODO 播放完
}
java实现:
private MediaPlayer mediaPlayer;
/**
* 打开assets下的音乐mp3文件
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void openAssetMusics(String mp3Name) {
try {
if (TextUtils.isEmpty(mp3Name) || !mp3Name.contains(".mp3")) {
return;
}
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
//播放 assets/a2.mp3 音乐文件
AssetFileDescriptor fd =
this.getAssets().openFd(mp3Name);
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
// mediaPlayer.setOnPreparedListener(onPreparedListener)//音频准备完毕
// mediaPlayer.setOnCompletionListener(onCompletionListener)//音频播放完毕
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}