
在我的应用程序中,我在ListvIEw中显示我的音频文件,并且当Listitem特定文件的点击必须在Listbar单元格中使用seekbar播放时.但现在我想在播放结束时更新ui.
我使用了onCompletionListener,但在重放开始时会重复调用.
这是我的代码
private voID startPlayBack(final MessagesAdapter.VIEwHolder vIEwHolder){ try { if(mMediaPlayer!=null){ if(mMediaPlayer.isPlaying()) { mMediaPlayer.stop(); } } mMediaPlayer.reset(); mMediaPlayer.setDataSource(vIEwHolder.mChatMessage.mMessages); mMediaPlayer.prepareAsync(); } catch (IOException e) { Log.i("audioplay", "IOException *************",e); }catch (IllegalStateException e) { Log.i("audioplay", "IllegalStateException *************",e); } mMediaPlayer.setonPreparedListener(new MediaPlayer.OnPreparedListener() { @OverrIDe public voID onPrepared(MediaPlayer mediaPlayer) { vIEwHolder.mAudioPlayBtn.setVisibility(VIEw.VISIBLE); vIEwHolder.mAudioPlayBtn.setimageDrawable(mContext.getResources().getDrawable(R.drawable.audio_close)); mMediaPlayer.setLooPing(false); mMediaPlayer.start(); } }); mMediaPlayer.setonCompletionListener(new MediaPlayer.OnCompletionListener() { @OverrIDe public voID onCompletion(MediaPlayer mediaPlayer) { Log.i("Completion Listener", "audio Completed"); } }); vIEwHolder.mAudioSeekbar.setonSeekbarchangelistener(new Seekbar.OnSeekbarchangelistener() { @OverrIDe public voID onStopTrackingtouch(Seekbar seekbar) { } @OverrIDe public voID onStartTrackingtouch(Seekbar seekbar) { } @OverrIDe public voID onProgressChanged(Seekbar seekbar, int progress, boolean fromUser) { if (mMediaPlayer != null && fromUser) { mMediaPlayer.seekTo(progress * 1000); mMediaPlayer.start(); } } }); seekUpdation(vIEwHolder); }这是获取的日志信息,
08-20 07:28:24.099 14873-14873/com.cybosol.sabanet I/Completion Listener﹕ audio Completed08-20 07:28:24.099 14873-14873/com.cybosol.sabanet I/Completion Listener﹕ audio Completed08-20 07:28:24.099 14873-14873/com.cybosol.sabanet I/Completion Listener﹕ audio Completed08-20 07:28:24.103 14873-14873/com.cybosol.sabanet I/Completion Listener﹕ audio Completed08-20 07:28:24.107 14873-14873/com.cybosol.sabanet I/Completion Listener﹕ audio Completed08-20 07:28:24.107 14873-14873/com.cybosol.sabanet I/Completion Listener﹕ audio Completed08-20 07:28:25.739 14873-14873/com.cybosol.sabanet I/Completion Listener﹕ audio Completed08-20 07:28:26.415 14873-14873/com.cybosol.sabanet I/Completion Listener﹕ audio Completed08-20 07:28:26.415 14873-14873/com.cybosol.sabanet I/Completion Listener﹕ audio Completed08-20 07:28:26.419 14873-14873/com.cybosol.sabanet I/Completion Listener﹕ audio Completed08-20 07:28:26.419 14873-14873/com.cybosol.sabanet I/Completion Listener﹕ audio Completed08-20 07:28:27.323 14873-14873/com.cybosol.sabanet I/Completion Listener﹕ audio Completed08-20 07:28:27.959 14873-14873/com.cybosol.sabanet I/Completion Listener﹕ audio Completed解决方法:
在VIEwPager中使用MediaPlayers时遇到了类似的问题.事实证明,MediaPlayers遇到了一个错误,导致调用OnCompletionListener.从OnErrorListener documentation:
Returns
True if the method handled the error, false if it dIDn’t. Returning false, or not having an one rrorListener at all, will cause the OnCompletionListener to be called.
为MediaPlayers实现一个OnErrorListener,以防止对OnCompletionListener进行无关的调用.
总结以上是内存溢出为你收集整理的android – Mediaplayer setOnCompletionListener重复调用全部内容,希望文章能够帮你解决android – Mediaplayer setOnCompletionListener重复调用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)