Programación de Android – Hacer un URI para obtener la ubicación de audio

Soy nuevo a Java y también la programación de Android, así que las cosas son un poco extraño para mí! ¡Vengo principalmente de un fondo en C ++ / C # así que hable la tecnología!

De todos modos.

Estoy tratando de crear una clase simple que maneje audio para un reproductor de música personalizado que estoy diseñando. Tengo todos los eventos de keypress manejados, así que ahora estoy trabajando en la funcionalidad.

Estoy usando la clase MediaPlayer para manejar la mayoría de las cosas difíciles, pero estoy un poco confundido sobre cómo acceder al audio que se guarda en un dispositivo móvil de los usuarios.

He estado haciendo un poco de investigación, y al parecer, el dispositivo Android tiene una base de datos incorporada que gestiona las ubicaciones de todo el audio, y para acceder a estos datos tengo que usar un Uri ?

Si alguien podría publicar algunos ejemplos de código de cómo usar un Uri para acceder a esto, entonces estoy bastante seguro de que será capaz de construir en la parte superior de la que a continuación, agregar los datos en cualquier contenedor que deseo.

Sólo para dejar claro – el directorio de ubicación de música no es conocido por el usuario, y no estoy haciendo una carpeta en bruto, quiero tener acceso a toda la música en el dispositivo de los usuarios donde el software puede reproducirlo.

O si eso falla, un buen tutorial … He mirado los documentos dados por google, pero no hay ningún código de ejemplo, así que realmente no sé por dónde empezar!

Gracias a todos.

Este es el ejemplo de código de cómo usar un Uri para acceder a Audios, este código busca canciones en el dispositivo de los usuarios y almacena los detalles en songsList.

Prueba este código

 ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); String[] STAR = { "*" }; Cursor cursor; Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; cursor = managedQuery(uri, STAR, selection, null, null); if (cursor != null) { if (cursor.moveToFirst()) { do { String songName = cursor .getString(cursor .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); String path = cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.DATA)); String albumName = cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.ALBUM)); int albumId = cursor .getInt(cursor .getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)); HashMap<String, String> song = new HashMap<String, String>(); song.put("songTitle",albumName+" "+songName+"___"+albumId); song.put("songPath",path ); songsList.add(song); } while (cursor.moveToNext()); } } 

Es probable que vaya a utilizar el MediaStore proporcionado y consultarlo para todo el audio encontrado. Es un ContentProvider que viene con el sistema y puede acceder a él usando su propio ContentResolver . Echa un vistazo a MediaStore.Audio.Media y mira las entradas de Uri allí. Consulte también esta página , "Recuperación de medios de un ContentResolver" para obtener algún código de ejemplo simple.

Primero debes pensar si quieres o no realmente reproducir tus archivos de audio directamente a través del sistema de archivos. La forma más común de trabajar en android es acceder a los archivos multimedia consultando la base de datos incorporada en lugar de trabajar directamente con el sistema de archivos. Si desea trabajar con la base de datos de medios normalmente lo hace por:

  1. La adquisición de una instancia de un resolvedor de contenido (normalmente se realiza llamando a getContentResolver() en su actividad)
  2. A continuación, puede solicitar al ContentResolver los medios disponibles de un determinado tipo. Aquí usted entra en contacto con un URI por primera vez. Usted le dice al ContentResolver qué tipo de medio se le interesa especificando un URI específico para su consulta. Puesto que usted está interesado en la música usted consultaría android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI.

Ahora puede consultar su ContentResolver de esta manera:

 Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Cursor cursor = contentResolver.query(uri, null, null, null, null); 

Esta es la consulta más básica que le da todos los objetos de medios registrados. Al especificar los otros parámetros (NULL), puede especificar criterios de filtro, criterios de clasificación, etc.

Su consulta le da una instancia de Cursor. Con la instancia del cursor, básicamente puede hacer dos cosas.

  • Puede iterar a través de los resultados de su consulta
  • Puede preguntar sobre la estructura de columnas de sus resultados (por ejemplo, el índice de la columna de nombre TITLE, el nombre del artista ARTIST y la última pero no menos importante la columna ID).

Así que supongamos que sólo está interesado en el ID de la primera canción. Para ello, establezca su Cursor en el principio llamando a:

 cursor.moveToFirst(); 

Ahora puede simplemente llamar a los getters de cursor del cursor para acceder a las columnas que le interesan, por ejemplo, para el ID de esta canción que usted llamaría:

 long mySongId=cursor.getLong(cursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID)); 

Si quieres saber el nombre del álbum que harías:

 cursor.getString(android.provider.MediaStore.Audio.Media.ALBUM); 

Evidentemente omitido todo el manejo de errores por brevedad (en un ejemplo de mundo real debe comprobar si hay alguna canción en su dispositivo, que la consulta tuvo éxito, …).

Ahora, ya que tiene su ID de canciones en mySongId puede ir por la URI cosa una segunda vez. Esta vez puede generar un URI totalmente calificado para su canción llamando a:

 Uri mySongUri=ContentUris.withAppendedId(android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, mySongsId); 

Esto le da la URI de su archivo multimedia que puede darle al reproductor multimedia para comenzar a reproducir su archivo:

 myMPlayer = new MediaPlayer(); myMPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); myMPlayer.setDataSource(getApplicationContext(), mySongUri); 

Asegúrese de tener una buena canción como la primera canción en su dispositivo para que llegue a escuchar buena música después de todo el trabajo duro 🙂

Btw .: Si desea obtener más información sobre los conceptos ContentProvider y ContentResolver de Android, puede consultar este tutorial: http://www.grokkingandroid.com/android-tutorial-content-provider-basics/

  • ¿Hay lejos para conseguir uri del mapa de bits con hacia fuera excepto él a sdcard?
  • ENOENT (ningún archivo o directorio) cuando hay un archivo allí
  • Android.net.uri getQueryParameterNames () alternativa
  • Obtener orientación de la imagen de MediaStore.Images.Media.DATA
  • CursorLoader, obtiene URI para la base de datos local
  • Android Cómo obtener información de ID de una sola canción desde un URI conocido
  • Poner una imagen grande en un ImageView no funciona
  • Obtener imagen Uri en onActivityResult después de tomar la foto?
  • ¿Cómo obtener una instancia de archivo de un drawable?
  • Descubriendo todo acerca de la clase Uri de Android: uso y propósito
  • Cómo recuperar ImageUri de un ImageView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.