1

ich Musik, die ich überDetect Musik fertig spielen

spielen
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(); 

Wie soll ich erkennen, ob diese Musik aufgehört zu spielen, so dass ich nächste Spiel beginnen kann? Ich habe versucht, ständig überprüft (einmal pro Sekunde), über

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

Aber das scheint nicht zu funktionieren (immer true zurück). Gibt es irgendwelche anderen Mittel, um über die unterbrochene Musik benachrichtigt zu werden, damit ich mit der nächsten anfangen kann?

Antwort

1

Verwenden MediaPlayer.onCompletionListener auf das Ereignis zu hören, wenn ein Titel endet. Die nächste Audiodatei wird danach abgespielt. Ein Beispiel

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

Eine zusätzliche Empfehlung, mehrere Audios auf nach dem anderen zu spielen, Sie müssen nicht onCompletionListener verschachtelt zu erstellen. Verwenden Sie stattdessen den folgenden Code.

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(); 
Verwandte Themen