簡體   English   中英

在Android(Java)中一首一首的播放歌曲

[英]Playing songs one after another in Android(Java)

我想在我的音樂播放器應用程序中一首又一首地播放歌曲。 我檢查了這個問題,但我的音樂播放器只播放下一首歌一次。 之后它停止。 例如,它正在播放歌曲A,然后它會播放下一首歌曲B,但在歌曲B之后它不會播放歌曲C。

這是我的代碼:

OnCompleteListener:

//mp is MediaPlayer object, al is ArrayList of songs and their ids(R.raw.song), song_no is the index of the song in al
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                song_no = (song_no +1) % al.size();
                playSong();
            }
        });

我對“下一個”按鈕有相同的代碼,它可以完美地工作,即使在到達列表末尾后它也會循環回來。 播放歌曲 function:

public void playSong()
    {
        song = Uri.parse("android.resource://" + getPackageName() + "/" + al.get(song_no).id());
        try
        {
            mp.stop();
            mp.reset();
            mp.release();
            mp = null;
        }
        catch(Exception e)
        {
            Log.d("playSong", e.toString();
        }
        mp = MediaPlayer.create(getApplicationContext(), song);

        mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.start();
            }
        });
    }

我嘗試刪除mp.reset()mp.release()mp = null但它仍然只播放了下一首歌曲。

看起來你想要一個Queue數據結構,希望它比跟蹤索引更容易處理。 您的al變量將存儲要播放的歌曲隊列,在您的onCompletion方法中,您可以調用playNextSong()方法,該方法使用poll()remove()處理隊列以獲取下一首歌曲並播放直到隊列為空。

如果您想保留您的 ArrayList,請嘗試調試您的song_nosong變量以縮小問題是否出在歌曲順序邏輯或 MediaPlayer 使用中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM