Sto provando a utilizzare lo stesso lettore multimediale ma a modificare l'origine dati. Qui è quello che sto cercando di fare: Modifica dell'origine dati per la riproduzione audio utilizzando MediaPlayer esistente?
private MediaPlayer mMediaPlayer;
public void pickFile1() {
initMediaPlayer("myfile1.mp3");
}
public void pickFile2() {
initMediaPlayer("myfile2.mp3");
}
private void initMediaPlayer(String mediafile) {
// Setup media player, but don't start until user clicks button!
try {
if (mMediaPlayer == null) {
mMediaPlayer = new MediaPlayer();
} else {
mMediaPlayer.reset(); // so can change data source etc.
}
mMediaPlayer.setOnErrorListener(this);
AssetFileDescriptor afd = getAssets().openFd(mediafile);
mMediaPlayer.setDataSource(afd.getFileDescriptor());
}
catch (IllegalStateException e) {
Log.d(TAG, "IllegalStateException: " + e.getMessage());
}
catch (IOException e) {
Log.d(TAG, "IOException: " + e.getMessage());
}
catch (IllegalArgumentException e) {
Log.d(TAG, "IllegalArgumentException: " + e.getMessage());
}
catch (SecurityException e) {
Log.d(TAG, "SecurityException: " + e.getMessage());
}
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.prepareAsync(); // prepare async to not block main thread
mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK); // Keep playing when screen goes off!
}
Ho appena chiamo questo quando voglio passare ad un nuovo Mediafile. Tuttavia, sembra che non cambi la fonte dei dati. Prima domanda: è possibile farlo in questo modo, o devo rilasciare il lettore multimediale e crearne uno nuovo per ogni nuovo file? Se è possibile, allora perché il mio codice non funziona correttamente?
Edit: bene, rilasciando e ricreare il lettore multimediale non sta facendo neanche! Continua a suonare la stessa canzone!?!? Com'è possibile? Nuova idea: creare un lettore multimediale diverso per ogni traccia, è davvero quello che devo fare qui? Forse questo è un bug in Android?
Sì hai ragione, non ho incluso quella parte dal mio codice, quindi il mio campione è difettoso. Aggiornerò di conseguenza - sfortunatamente non è questo il motivo per cui il mio codice non funziona. Ho verificato con il debugger che il file multimediale ha un nome file diverso, anche se il file originale continua a essere riprodotto.Nel mio caso, il file è incluso nella cartella delle risorse, quindi posso accedere come mostrato nel mio codice. –