1

J'ai la musique que je joue viamusique Détecter fini de jouer

AssetFileDescriptor assetDescriptor = getAssets().openFd(filename); 
    MediaPlayer mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    mediaPlayer.setDataSource(assetDescriptor.getFileDescriptor(), assetDescriptor.getStartOffset(), assetDescriptor.getLength()); 
    mediaPlayer.prepareAsync(); 
    mediaPlayer.setVolume(1, 1); 
    mediaPlayer.start(); 

Comment dois-je détecter si cette musique a cessé de jouer pour que je puisse commencer à jouer suivant? J'ai essayé semblent constamment vérifier (une fois par seconde), par l'intermédiaire

((AudioManager) application.getSystemService(Context.AUDIO_SERVICE)).isMusicActive(); 

Mais cela ne veut pas travailler (retourne toujours vrai). Y a-t-il d'autres moyens pour que je sois averti que la musique a cessé de jouer pour que je puisse commencer la suivante?

Répondre

1

Utilisez MediaPlayer.onCompletionListener pour écouter l'événement quand une piste se termine. Le prochain fichier audio jouera après cela. Un exemple

player.prepare(); 
player.setOnCompletionListener(new OnCompletionListener() { 
    @Override 
    public void onCompletion(MediaPlayer player) { 
     player.stop(); 
     // next audio file 
    } 
}); 
player.start(); 

Une recommandation ajouté, de jouer plusieurs après l'autre sur Audios, vous ne devez pas créer imbriqué onCompletionListener. Au lieu de cela, utilisez le code ci-dessous.

int[] myAudio = {R.raw.audio1, R.raw.audio2, R.raw.audio3}; 
int mTrackFinish = 0; 
MediaPlayer mp = MediaPlayer.create(this, myAudio[0]); 
mp.setOnCompletionListener(new OnCompletionListener() 
{ 
@Override 
public void onCompletion(MediaPlayer mp) 
{ 
mTrackFinish++; 
mp.reset(); 
if(mTrackFinish < myAudio.length) 
     // play some audio from list 
    else 
     mTrackFinish=0; 
     mp.release(); 
     mp = null; // either set counter to 0 and start again or call end of list 

} 
}); 
mp.start();