2010-06-22 9 views
10

que copió canción.mp3 al directorio de los activos de mi proyecto y escribió este código:Error creando MediaPlayer con Uri o archivo en activos

private MediaPlayer mp; 

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

mp=MediaPlayer.create(this, uri); 

Después de ejecutar la sentencia de creación, el punto de fusión variable es nula. ¿Qué está mal?

Gracias.

Respuesta

6

probar esto y ver si las excepciones son capturados:

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

La excepción capturada explicará lo que está mal en su creación. De acuerdo con los documentos, el método de creación estática es solo una abreviatura de lo que está en el bloque try anterior. La principal diferencia que puedo ver es que el método estático create no arroja mientras que setDataSource lo hace.

+0

he añadido el manejo de excepciones como usted sugiere y un estado de mp.prepare() y yo estoy recibiendo este error en la preparación de() 06-22 14: 45: 20.806: ERROR/PlayerDriver (554): Comando PLAYER_SET_DATA_SOURCE completa con un error o información PVMFErrNotSupported 06-22 14: 45: 20.806: eRROR/MediaPlayer (857): error (1, -4) 06-22 14: 45: 20.987 : DEBUG/dalvikvm (857): JDWP invocación volviendo con exceptObj = 0x43744d68 06-22 14: 45: 33.056: DEBUG/ASSETTEST (857): IOException: Prepar e failed .: estado = 0x1 6-22 14: 45: 43.068: WARN/System.err (857): java.io.IOException: Prepare failed .: estado = 0x1 ¿Siguiente? – CalvinS

+7

Lo solucioné arreglando el código para acceder al archivo mp3 en los activos. pf = new MediaPlayer(); AssetFileDescriptor afd = getAssets() openFd ("song.mp3."); mp.setDataSource (afd.getFileDescriptor()); Gracias Jere! – CalvinS

21

Prueba esto:

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

Esto lo hizo por mí. Agregar explícitamente el desplazamiento y la longitud. Es extraño que solo dar el fd no funcionó. – grebulon

+0

Esta debería ser la respuesta aceptada. – BoD

Cuestiones relacionadas