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.
- Obtener el perfil de usuario / propietario de contacto URI y la imagen de usuario con API 8 en adelante
- Pantalla de chat de Skype desde la intención
- Android: Creación de miniaturas de vídeo de URI de vídeo
- Uri regresó después de ACTION_GET_CONTENT de la galería no está trabajando en setImageURI () de ImageView
- Significado de android.content.UriMatcher
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.
- Android: vinculación de aplicaciones - sólo admite ciertos caminos?
- Obtener URI de la imagen dibujable
- Android onNewIntent Uri es siempre nulo
- Obtener todos los sms de un teléfono Android
- Intellij Android esquema de proyecto ¿URI no está registrado?
- Puedo obtener el ancho de archivo de imagen y la altura de uri en android?
- Cómo obtener la ruta completa del archivo desde URI
- ¿Cómo puedo obtener el tipo mime de un archivo con su Uri?
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:
- La adquisición de una instancia de un resolvedor de contenido (normalmente se realiza llamando a
getContentResolver()
en su actividad) - 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/
- Cómo redirigir hacia la ventana de configuración de GPS en android o ios utilizando phonegap para activar o desactivar un GPS
- Autorización para Android Facebook SDK 3.0