我想实现一个应用程序基本的MediaPlayer,并具有根据剪辑是否正在播放按钮改变状态,播放完毕,或播放手动中断(由按下相同的按钮)。MediaPlayer的问题 - 音频文件只播放一次
与下面的代码,我得到如下结果:
第一次加载时,音频播放罚款。
如果我按下的ImageButton回放期间的第二时间,再现停止。当我再次按下它时,播放会从停止的时间戳恢复(我认为这是一个更奇怪的行为,更典型的是“暂停()”。)
一旦播放完成,按钮更改完美工作,但我无法重放音频文件的第二次。当我按下开始,它开始播放,然后立即转移到playbackcompleted,实际上并没有播放音频。
我已经通过其他职位淘/谷歌/ Android文档,但还没有找到一个解决方案尚未。
我也有尝试到目前为止:
setLooping(true); - 除了setOnCompletionListener之外,这完全没有效果。音频根本不播放。
在onCompletion方法中,将seekTo()设置为几个不同的值(0,100),并使用包括“getCurrentPosition()”的日志消息来确认它实际上正在执行此操作,但即使这确认它是从位置0开始,或100,结果还是一样的(听不见声音和完成立即发生)。
在onCompletion方法,几个调用的组合 “的stop()”, “prepareAsync()” 或甚至准备()。结果是相同的,然而在随后的尝试(即尝试2,3等)来播放,当被称为onCompletion方法,我开始各种错误调用停止()/准备()以不正确的状态的方法。
final ImageButton pauseButton = (ImageButton) rootView.findViewById(R.id.playButton1); final MediaPlayer mediaPlayer = MediaPlayer.create(getActivity().getApplicationContext(), R.raw.ch01_01); mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { pauseButton.setImageResource(R.drawable.play_button); } }); pauseButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(mediaPlayer.isPlaying()) { mediaPlayer.stop(); mediaPlayer.prepareAsync(); pauseButton.setImageResource(R.drawable.play_button); } else { mediaPlayer.start(); pauseButton.setImageResource(R.drawable.stop_button); } } });
任何帮助,将不胜感激!
P.S.我在我的应用程序中使用onCreateView方法中的所有代码片段。以防万一任何人认为这可能是相关的。
我看到两条奇怪的线。在停止播放器之后首先使用mediaPlayer.prepareAsync()。 prepareAsync()方法触发onPrepared侦听器,然后您可以启动播放器。所以你必须将prepareAsync行移到“else”块,从else块中移除mediaPlayer.start()到onPrepared方法。将setOnPrepared侦听器附加到mediaPlayer。请检查此图:http://developer.android.com/images/mediaplayer_state_diagram.gif – bajicdusko
嗨,谢谢你的回应!你注意到的异常只是我正在玩的一些东西,看看我停止()时是否得到相同的行为。 vs当它处于Completed状态时。 我删除了stop();和prepareAsync();并用一个暂停()代替。此暂停功能正常工作,这不是我目前的问题。我只希望它能够在完成后从头开始再玩。 一旦它完成,它不会再次播放,直到我退出活动并返回。 当它在PlaybackCompleted中时,我应该能够seekTo(0)并再次启动,但它不起作用。 –
所以,我一直在我的三星Galaxy S2上运行(运行Kitkat 4.4.4 Cyanogenmod)。 我试着在我的谷歌Nexus 7(2013)运行棒棒糖,它的工作原理是我想要的。有好几个小时浪费了*叹息* –