2011-05-03 9 views
5

Tengo un archivo de audio en mi directorio de activos. assets/audio/dance.mp3.carga un MediaPlayer desde un Uri en un contexto activo

Si ejecuto context.getAssets(). List ("audio"); aparece.

Pero cuando intento usar MediaPlayer.create (context, uri) siempre falla y devuelve null.

nada de esto parece funcionar

private void tryLoad(String path,Context context) 
{ 
    Uri uri = Uri.parse(path); 
    this.audioPlayer = MediaPlayer.create(context,uri); 
    if (this.audioPlayer == null) 
    { 
     Log.d(TAG, "loadAudio: audioPlayer is null. current assets"+ uri.toString()) ; 
    } 
    else 
    { 
     Log.d(TAG, "loadAudio: WORKED"+ uri.toString()) ; 
    } 

} 
public void loadAudio(Context context) 
{ 
    if (this.audioPlayer != null) 
     return; 
    if (this.audioFile != null && this.audioFile.length() >0) 
    { 
     try 
     { 
      tryLoad("/dance.mp3",context); 
      tryLoad("dance.mp3",context); 
      tryLoad("audio/dance.mp3",context); 
      tryLoad("/audio/dance.mp3",context); 
      tryLoad("assets/audio/dance.mp3",context); 
      tryLoad("/assets/audio/dance.mp3",context); 
      tryLoad("\\dance.mp3",context); 
      tryLoad("dance.mp3",context); 
      tryLoad("audio\\dance.mp3",context); 
      tryLoad("\\audio\\dance.mp3",context); 
      tryLoad("assets\\audio\\dance.mp3",context); 
      tryLoad("\\assets\\audio\\dance.mp3",context); 
     } 
     catch (Exception e) 
     { 
      Log.d(TAG, "loadAudio exception: " + e.getMessage()); 
     } 
    } 
} 

Respuesta

3

Creo que se puede hacer porque el MediaPlayer espera un URI y es imposible crear un URI de un archivo de activos. Intente crear un objeto MediaPlayer y establecer una fuente de datos utilizando el método MediaPlayer.setDataSource(FileDescriptor). Puede obtener el objeto FileDescriptor utilizando el método AssetManager.openFd() y luego llamando al método AssetFileDescriptor.getFileDescriptor() para el objeto devuelto.

No he probado esta solución, así que es solo una idea. Pero espero que funcione.

+0

Uy .. no ver su respuesta (acaba de editar uno antiguo) de todos modos - 1 por ser más rápido :) – MByD

+0

@ madmik3 Hola, se puede otorgar una recompensa a este responde si crees que es correcto. De lo contrario, su recompensa puede perderse porque no se otorga automáticamente cuando acepta una respuesta. – Michael

0

Es necesario poner el archivo en la carpeta res/raw y luego cargarlo con:

MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);

Desde: Android documentation

+0

que requiere que los archivos estén codificados y eso es lo que estoy tratando de evitar. – madmik3

+0

lo siento, esto no estaba claro en su pregunta original. ¿Has probado esto en su lugar: 'mp = new MediaPlayer(); AssetFileDescriptor afd = getAssets(). OpenFd ("dance.mp3"); mp.setDataSource (afd.getFileDescriptor()); ' –

Cuestiones relacionadas