2012-06-06 88 views

回答

1

有各種MediaPlayer的回調使用他們喜歡的:

http://www.androidadb.com/class/on/OnCompletionListener.html

mMediaPlayer.setOnCompletionListener(new OnCompletionListener() { 

    public void onCompletion(MediaPlayer theMediaPlayer) { 
     mParent.playNextAudio(); 
     mParent = null; 
    } 

http://developer.android.com/reference/android/media/MediaPlayer.html#setOnCompletionListener(android.media.MediaPlayer.OnCompletionListener)

+0

String PATH_TO_FILE =「/ sdcard/my_downloads /」+ filenum +「.mp3」; mediaPlayer = new MediaPlayer(); 嘗試mediaPlayer.setDataSource(PATH_TO_FILE); mediaPlayer.prepare(); mediaPlayer.start(); mediaPlayer.setOnCompletionListener(新OnCompletionListener(){ 公共無效onCompletion(MediaPlayer的熔點){// TODO 字符串路徑= 「/ SD卡/ my_downloads/」+ FILENUM +「 MP3」 ; MEDIAPLAYER =新的MediaPlayer(); 嘗試{ mediaPlayer.setDataSource(路徑); mediaPlayer.prepare(); mediaPlayer.start();} CATC h(例外e){TODO:處理異常 } filenum ++; } }); –

+0

我實現了這個,但是...它不能正常工作......它只播放前兩個文件 –

+0

我有相同的,它只播放前兩個文件。您似乎不得不向MediaPlayer添加oncompletionlistener。不知道如何雖然... – dorien

5

你可以嘗試這樣的事情:

public class MainActivity extends Activity implements MediaPlayer.OnCompletionListener 
{ 
    int[] tracks = new int[3]; 
    int currentTrack = 0; 
    private MediaPlayer mediaPlayer = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     tracks[0] = R.raw.say1; 
     tracks[1] = R.raw.say2; 
     tracks[2] = R.raw.say3; 
     mediaPlayer = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]); 
     mediaPlayer.setOnCompletionListener(this); 
     mediaPlayer.start(); 
    } 

    public void onCompletion(MediaPlayer arg0) { 
     arg0.release(); 
     if (currentTrack < tracks.length) { 
     currentTrack++; 
     arg0 = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]); 
     arg0.setOnCompletionListener(this); 
     arg0.start(); 
     } 
    } 
} 
+0

這隻執行前兩個音頻文件,第三個不播放。爲什麼會發生這種情況,你有任何解決辦法嗎? –

3

我用下面的代碼這樣做:

private ArrayList<MediaPlayer> mPlayerList = new ArrayList<MediaPlayer>(); 
public void playSound4FileList(ArrayList<String> fileList) 
{ 
    mPlayerList.clear(); 
    for (String fileName : fileList) 
    { 
     try { 
      MediaPlayer mPlayerT = new MediaPlayer(); 

      AssetFileDescriptor descriptor = context.getAssets().openFd(fileName); 
      mPlayerT.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength()); 
      descriptor.close(); 

      mPlayerT.prepare(); 
      mPlayerT.setVolume(1f, 1f); 
      mPlayerT.setLooping(false); 

      mPlayerList.add(mPlayerT); 

     } catch (Exception e) { 
     } 

    } 
    for (int i=0; i<mPlayerList.size()-1; i++) //Do not include last element 
    { 
     mPlayerList.get(i).setNextMediaPlayer(mPlayerList.get(i+1)); 

    } 

    mPlayerList.get(0).start(); 
} 
+0

調用需要API級別16:android.media.MediaPlayer#setNextMediaPlayer! – yoosha

相關問題