Reproducir archivo de audio desde el directorio de activos

Tengo el siguiente código:

AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3"); player = new MediaPlayer(); player.setDataSource(afd.getFileDescriptor()); player.prepare(); player.start(); 

El problema es que, cuando ejecuto este código, comienza a reproducir todos los archivos de audio en el directorio de activos, en orden alfabético en lugar de simplemente reproducir el archivo de audio que solicité. ¿Qué estoy haciendo mal? ¿Hay una mejor manera de reproducir archivos de audio desde el directorio de activos?

Pregunta de seguimiento: ¿Existe alguna diferencia entre mantener archivos de audio en el directorio de activos y mantenerlos en el directorio res / raw? Además del hecho de que no obtienen ids si están en el directorio de activos. Si muevo los archivos de audio a la carpeta res / raw entonces tengo un problema con la reutilización de MediaPlayer s porque no hay ningún parámetro id para setDataSource() . No puedo encontrar una buena guía para manejar este tipo de problema.

2 Solutions collect form web for “Reproducir archivo de audio desde el directorio de activos”

 player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 

Su versión funcionaría si sólo tuviera un archivo en el directorio de activos. Los contenidos del directorio de activos no son realmente 'archivos reales' en el disco. Todos ellos están juntos uno tras otro. Por lo tanto, si no especifica por dónde empezar y cuántos bytes leer, el reproductor leerá hasta el final (es decir, seguirá reproduciendo todos los archivos en el directorio de activos)

Esta función funcionará correctamente 🙂

 // MediaPlayer m; /*assume, somewhere in the global scope...*/ public void playBeep() { try { if (m.isPlaying()) { m.stop(); m.release(); m = new MediaPlayer(); } AssetFileDescriptor descriptor = getAssets().openFd("beepbeep.mp3"); m.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength()); descriptor.close(); m.prepare(); m.setVolume(1f, 1f); m.setLooping(true); m.start(); } catch (Exception e) { e.printStackTrace(); } } 
  • Conflicto Android drawable de la identificación del recurso?
  • Acceso al recurso definido en el tema y attrs.xml android
  • No se encuentran recursos de Android en algunos dispositivos
  • Compartir recursos en bruto a través de WhatsApp
  • Java: Acceso a recursos y la ley de Demeter
  • ¿No puede anular el recurso xml de la biblioteca con el recurso png en la aplicación?
  • Cómo cambiar el tema de otro recurso de la aplicación en android?
  • ¿Por qué no se actualizan mis archivos de activos?
  • Cómo realizar 3D Curve Wall con jQuery o js
  • ¿Por qué setImageResource no muestra nada?
  • La razón de los activos y recursos crudos en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.