2015-06-06 14 views
5

Ho un problema a riprodurre più file mp3 utilizzando MediaPlayer in Android. Sono in grado di riprodurre un singolo file ma non ho trovato nulla di utile per riprodurre file diversi uno dopo l'altro.Elenco di riproduzione di file mp3 con MediaPlayer in Android

Il codice che ora uso di riprodurre un file è:

public MediaPlayer mediaPlayer = null; 

public void playP(View view) { 

    if (mediaPlayer == null) { 
     mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.music); 
    } 
    mediaPlayer.start(); 

} 

Come posso modificarlo in modo da riprodurre più un elenco di file di?

Grazie

+0

Non capisco. Vuoi creare/aggiungere brani a una playlist? Ci stai ancora lavorando? E, mediaPlayer riproduce i brani ma non li memorizza. –

+0

Sì, sto lavorando per provare a riprodurre un elenco di file audio con MediaPlayer. – Gualty

risposta

7

Crea una lista della musica che si desidera includere nella playlist. Quindi tieni traccia della musica che sta suonando e una volta terminato inizia il prossimo nella lista.

Ti piace questa

import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.Menu; 
import android.view.MenuItem; 

import java.util.ArrayList; 
import java.util.Timer; 
import java.util.TimerTask; 


public class MainActivity extends AppCompatActivity { 

    Timer timer; 
    MediaPlayer mp; 
    ArrayList<Integer> playlist; 
    int i=0; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     playlist = new ArrayList<>(); 
     playlist.add(R.raw.a1); 
     playlist.add(R.raw.a2); 
     mp = MediaPlayer.create(this,playlist.get(0)); 
     mp.start(); 
     timer = new Timer(); 
     if (playlist.size()>1) playNext(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    public void playNext() { 
     timer.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       mp.reset(); 
       mp = MediaPlayer.create(MainActivity.this,playlist.get(++i)); 
       mp.start(); 
       if (playlist.size() > i+1) { 
        playNext(); 
       } 
      } 
     },mp.getDuration()+100); 
    } 

    @Override 
    public void onDestroy() { 
     if (mp.isPlaying()) 
      mp.stop(); 
     timer.cancel(); 
     super.onDestroy(); 
    } 
} 
+0

Qualche idea su come codificarlo? Per il ciclo? – Gualty

+0

sembra che manchi il codice, perché se si disattiva questo ciclo con 'playNext()' allora mp sarà nullo quando tenta di eseguire 'mp.getDuration()' –

Problemi correlati