¿Cómo puedo acceder a la lista de reproducción creada por la aplicación de música por defecto de Android y llamar a la aplicación de música para reproducirla?
Estoy escribiendo una aplicación para Android, y quiero acceder a la lista de reproducción creada por la aplicación de música por defecto de Android.
En mi aplicación, el usuario debe poder examinar la lista de reproducción y seleccionar cualquier lista de reproducción para reproducir.
- Reproducción de música BG en actividades en Android
- Selector de canciones para Android
- Cómo grabar vídeo en Android en Stream
- Mediacodec vs mediaplayer y mediarecorder
- ¿El navegador de Android indica un tamaño de pantalla incorrecto?
Así que básicamente quiero saber cómo acceder a él y cuando el usuario selecciona cualquier lista de reproducción, cómo pasar a la aplicación de música por defecto para jugar en segundo plano.
¿Tiene algo que ver con ContentProvider o mediastore? Realmente no sé cómo acceder a los datos de otras aplicaciones.
Muchas gracias!
- La música se detiene cuando la pantalla gira utilizando MediaPlayer en Android
- ¿Cómo detectar si el discurso al texto está disponible en android?
- Obtener imágenes en miniatura
- Phonegap Android Webview Video reproduce sólo audio
- android.media paquete falta pocas clases en sdk-plataformas
- ¿Qué es Context.getExternalMediaDir ()?
- Escanear la tarjeta SD de Android para nuevos archivos
- Reproducir sonido utilizando el ejemplo de grupo de sonidos
Para reproducir las canciones de listas de reproducción anteriores, estoy llamando a la función
PlaySongsFromAPlaylist (PlayListID); // 0 <PlayListID <count
Del método onCreate anterior. Y el código restante es como se menciona a continuación.
public void PlaySongsFromAPlaylist(int playListID){ String[] ARG_STRING = {MediaStore.Audio.Media._ID,MediaStore.Audio.Media.DATA,MediaStore.Audio.Media.DISPLAY_NAME,MediaStore.Video.Media.SIZE,android.provider.MediaStore.MediaColumns.DATA}; Uri membersUri = MediaStore.Audio.Playlists.Members.getContentUri("external", playListID); Cursor songsWithingAPlayList = mThis.managedQuery(membersUri, ARG_STRING, null, null, null); int theSongIDIwantToPlay = 0; // PLAYING FROM THE FIRST SONG if(songsWithingAPlayList != null) { songsWithingAPlayList.moveToPosition(theSongIDIwantToPlay); String DataStream = songsWithingAPlayList.getString(4); PlayMusic(DataStream); songsWithingAPlayList.close(); } } public static void PlayMusic(String DataStream){ MediaPlayer mpObject = new MediaPlayer(); if(DataStream == null) return; try { mpObject.setDataSource(DataStream); mpObject.prepare(); mpObject.start(); } catch (Exception e) { e.printStackTrace(); } }
Espero que esto funcione. 🙂
Para mostrar toda la lista de reproducción creada por el usuario en la aplicación de música predeterminada en Android, utilizo el siguiente bloque de código en mi Actividad:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String[] proj = {"*"}; Uri tempPlaylistURI = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI; // In the next line 'this' points to current Activity. // If you want to use the same code in other java file then activity, // then use an instance of any activity in place of 'this'. Cursor playListCursor= this.managedQuery(tempPlaylistURI, proj, null,null,null); if(playListCursor == null){ System.out.println("Not having any Playlist on phone --------------"); return;//don't have list on phone } System.gc(); String playListName = null; System.out.println(">>>>>>> CREATING AND DISPLAYING LIST OF ALL CREATED PLAYLIST <<<<<<"); for(int i = 0; i <playListCursor.getCount() ; i++) { playListCursor.moveToPosition(i); playListName = playListCursor.getString(playListCursor.getColumnIndex("name")); System.out.println("> " + i + " : " + playListName ); } if(playListCursor != null) playListCursor.close(); }
No se olvide de incluir estos antes de usar
import android.net.Uri; import android.provider.MediaStore; import android.database.Cursor;
Este código está probado y funciona bien sobre target = android-8
Esta actividad combina las dos respuestas de Ankur Pandya para listar las listas de reproducción en el dispositivo y luego reproducir la primera pista de la primera lista de reproducción.
package com.withoutstones.pandyaplaylists; import android.app.Activity; import android.content.ContentResolver; import android.database.Cursor; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.util.Log; /** * @author Ankur Pandya * @author Tommy Herbert */ public class PandyaPlaylistsActivity extends Activity { // constants private static final String LOGGING_TAG = "PandyaPlaylists"; // static methods /** * Create a MediaPlayer and play the specified audio file. Note that a full app would usually * call stop() and release() on the player after use. * * @param path * to data file */ public static void playAudio(final String path) { final MediaPlayer player = new MediaPlayer(); if (path == null) { Log.e(LOGGING_TAG, "Called playAudio with null data stream."); return; } try { player.setDataSource(path); player.prepare(); player.start(); } catch (Exception e) { Log.e(LOGGING_TAG, "Failed to start MediaPlayer: " + e.getMessage()); return; } } // superclass overrides @Override public void onCreate(final Bundle savedInstanceState) { // Create the superclass portion of the object. super.onCreate(savedInstanceState); // Set up the UI. this.setContentView(R.layout.main); // Get a cursor over all playlists. final ContentResolver resolver = this.getContentResolver(); final Uri uri = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI; final String idKey = MediaStore.Audio.Playlists._ID; final String nameKey = MediaStore.Audio.Playlists.NAME; final String[] columns = { idKey, nameKey }; final Cursor playLists = resolver.query(uri, columns, null, null, null); if (playLists == null) { Log.e(LOGGING_TAG, "Found no playlists."); return; } // Log a list of the playlists. Log.i(LOGGING_TAG, "Playlists:"); String playListName = null; for (boolean hasItem = playLists.moveToFirst(); hasItem; hasItem = playLists.moveToNext()) { playListName = playLists.getString(playLists.getColumnIndex(nameKey)); Log.i(LOGGING_TAG, playListName); } // Play the first song from the first playlist. playLists.moveToFirst(); final long playlistID = playLists.getLong(playLists.getColumnIndex(idKey)); this.playTrackFromPlaylist(playlistID); // Close the cursor. if (playLists != null) { playLists.close(); } } // PandyaPlaylistsActivity instance methods /** * Play the first track on the specified playlist. * * @param playListID * from the MediaStore database */ public void playTrackFromPlaylist(final long playListID) { final ContentResolver resolver = this.getContentResolver(); final Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", playListID); final String dataKey = MediaStore.Audio.Media.DATA; Cursor tracks = resolver.query(uri, new String[] { dataKey }, null, null, null); if (tracks != null) { tracks.moveToFirst(); final int dataIndex = tracks.getColumnIndex(dataKey); final String dataPath = tracks.getString(dataIndex); PandyaPlaylistsActivity.playAudio(dataPath); tracks.close(); } } }
- Androide: elipsis, significado de las opciones
- Retrofit 2.0 lanzando "IllegalArgumentException: los parámetros @Field solo se pueden usar con la codificación de formularios". ¿Cómo hacer la consulta correcta de la API y arreglarlo?