我使用SoundPool来播放声音效果,但现在我需要切换到MediaPlayer,因为我需要监听onCompletion事件来触发GUI更改。
我的问题是:
MediaPlayer吗?mediaPlayer.stop()吗?
MediaPlayer.setOnCompletionListener(新MediaPlayer.OnCompletionListener() {公共MediaPlayer.OnCompletionListener onCompletion(MediaPlayer mediaPlayer) {//做一些图形用户界面更改mediaPlayer.stop();mediaPlayer.release();});那么,要发挥另一种效果,就可以做到这一点:
mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start();所以,每当我发挥效果的时候,创造和释放都可以吗?
发布于 2016-02-27 17:04:44
初始化您的MediaPlayer
MediaPlayer mediaPlayer = new MediaPlayer();
AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid);
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();查看MediaPlayer生命周期:

当轨道完成时,MediaPlayer处于Stopped状态,您不需要更改轨道,因此:调用Stopped
发布于 2016-02-27 17:05:11
声音文件很小,小于30 in,我可以在主线程中使用MediaPlayer吗?
无论音频文件的大小如何,您都应该在它自己的线程上运行MediaPlayer,特别是当您正在从网络上播放一个文件时。不这样做可能会导致ANR (在你的情况下,我不认为有什么可担心的)
演出结束后,我能打电话给mediaPlayer.stop()吗?
没有必要在每个音频文件之后释放MediaPlayer。一旦你不再使用它,就释放它。
我怎样才能加载新声音?
AssetFileDescriptor audio = context.getResources().openRawResourceFd(R.raw.next_audio);
mediaPlayer.setDataSource(audio);https://stackoverflow.com/questions/35672451
复制相似问题