Changement de source de données pour la lecture audio en utilisant les MediaPlayer?

Je suis en train d'utiliser le même média player mais le changement de la source de données. Voici ce que je suis en train de faire:

    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!
}

Je viens de l'appeler quand je veux changer pour une nouvelle mediafile. Il ne semble pas être en train de changer la source de données avec succès. Première question: est-il possible de faire de cette façon, ou dois-je libérer le media player et en créer un nouveau pour chaque nouveau fichier? Si c'est possible, alors pourquoi n'est-ce pas mon code de travail de droit?

Edit: et de les libérer et de recréer le media player ne le fait pas!!!! Il ne cesse de jouer la même chanson!?!? Comment est-ce même possible? Idée nouvelle, créer un autre lecteur multimédia pour chaque piste, est-ce vraiment ce que j'ai à faire ici? Est-ce un bug Android peut-être?

OriginalL'auteur Alan Moore | 2011-08-30