我想實現一個應用程序基本的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)運行棒棒糖,它的工作原理是我想要的。有好幾個小時浪費了*嘆息* –