2010-06-22 4 views
10

j'ai copié song.mp3 dans le répertoire de mon projet actif et a écrit ce code:Erreur de création MediaPlayer avec Uri ou d'un fichier actif

private MediaPlayer mp; 

Uri uri = Uri.parse("file:///android_asset/song.mp3"); 

mp=MediaPlayer.create(this, uri); 

Après avoir exécuté l'instruction create, le point de fusion variable est nulle. Qu'est-ce qui ne va pas?

Merci.

Répondre

6

Essayez et voir si des exceptions sont pris:

try { 
    MediaPlayer mp = new MediaPlayer(); 
    mp.setDataSource(this, uri); 
} 
catch (NullReferenceArgument e) { 
    Log.d(TAG, "NullReferenceException: " + e.getMessage()); 
} 
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()); 
} 

L'exception pris expliquera ce qui va mal dans votre création. Selon les docs, la méthode statique create est juste un raccourci pour ce qui est dans le bloc try ci-dessus. La différence majeure que je peux voir est que la méthode statique create ne lance pas while setSourceSource.

+0

I ajouté la gestion des exceptions comme vous le suggérez et une déclaration mp.prepare() et je reçois cette erreur sur la préparation() 06-22 14: 45: 20,806: ERREUR/PlayerDriver (554): commande PLAYER_SET_DATA_SOURCE complétée par une erreur ou d'informations PVMFErrNotSupported 06-22 14: 45: 20,806: eRREUR/MediaPlayer (857): erreur (1, -4) 06-22 14: 45: 20,987 : DEBUG/dalvikvm (857): invocation JDWP renvoyant avec exceptObj = 0x43744d68 06-22 14: 45: 33.056: DEBUG/ASSETTEST (857): IOException: Préparer Échec: status = 0x1 6-22 14: 45: 43.068: WARN/System.err (857): java.io.IOException: Préparation échouée: état = 0x1 Suivant? – CalvinS

+7

J'ai résolu cela en fixant le code pour accéder au fichier mp3 dans les actifs. mp = nouveau MediaPlayer(); AssetFileDescriptor afd = getAssets(). OpenFd ("chanson.mp3"); mp.setDataSource (afd.getFileDescriptor()); Merci Jere! – CalvinS

21

Essayez ceci:

try { 
    AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3"); 
    player = new MediaPlayer(); 
    player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 
    player.prepare(); 
    player.start(); 
    } 
catch (IllegalArgumentException e) { } 
catch (IllegalStateException e) { } 
catch (IOException e) { } 
+1

Cela l'a fait pour moi. Ajout explicite de l'offset et de la longueur. Étrange que juste donner le fd n'a pas fonctionné. – grebulon

+0

Ceci devrait être la réponse acceptée. – BoD

Questions connexes