Estoy intentando crear una nueva Playlist
, usando Android ContentResolver
, que se agregará a las listas de reproducción del reproductor de música, pero cuando se ejecuta el código, la inserción en la lista de reproducción devuelve nulo (para el Uri
) y cuando reviso las listas de reproducción del reproductor de música, mi nueva entrada Playlist
no está allí. Sospecho que la razón por la que el insert()
devuelve null es porque no he creado la lista de reproducción correctamente. ¿Podría alguien aclarar cómo crear dinámicamente una nueva lista de reproducción, dado que mi código no funciona? (En mi búsqueda, he encontrado varios forma de consultar las listas de reproducción, pero nada realmente crea una nueva)Cómo crear una nueva lista de reproducción usando ContentResolver
es mi código aquí ...
ContentResolver resolver = getActivity().getContentResolver();
Uri playlists = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
Log.d(A.TAG, "Checking for existing playlist for " + chart.getName());
Cursor c = resolver.query(playlists, new String[] {"*"}, null, null, null);
long playlistId = 0;
c.moveToFirst();
do {
String plname = c.getString(c.getColumnIndex(MediaStore.Audio.Playlists.NAME));
if (plname.equalsIgnoreCase(chart.getName())) {
playlistId = c.getLong(c.getColumnIndex(MediaStore.Audio.Playlists._ID));
break;
}
} while (c.moveToNext());
c.close();
if (playlistId!=0) {
Uri deleteUri = ContentUris.withAppendedId(playlists, playlistId);
Log.d(A.TAG, "REMOVING Existing Playlist: " + playlistId);
// delete the playlist
resolver.delete(deleteUri, null, null);
}
Log.d(A.TAG, "CREATING PLAYLIST: " + chart.getName());
ContentValues v = new ContentValues();
v.put(MediaStore.Audio.Playlists.NAME, chart.getName());
v.put(MediaStore.Audio.Playlists.DATE_MODIFIED, System.currentTimeMillis());
Uri newpl = resolver.insert(playlists, v);
Log.d(A.TAG, "Added PlayLIst: " + newpl);
Uri insUri = Uri.withAppendedPath(newpl, MediaStore.Audio.Playlists.Members.CONTENT_DIRECTORY);
int order = 1;
Log.d(A.TAG, "Playlist Members Url: " + insUri);
c = getContentManager().queryWhere(getActivity(), Song.class, Song.Fields.LIBRARYID + " != 0 and " + Song.Fields.CHARTID + " = " + chart.getId(), (String[])null);
if (c.moveToFirst()) {
Log.d(A.TAG, "Adding Songs to PlayList **");
do {
long id = c.getLong(c.getColumnIndex(Song.Fields.LIBRARYID));
ContentValues cv = new ContentValues();
cv.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, order++);
cv.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, id);
Uri u = resolver.insert(insUri, cv);
Log.d(A.TAG, "Added Playlist Item: " + u + " for AUDIO_ID " + id);
} while (c.moveToNext());
}
c.close();
ACTUALIZACIÓN: Parcialmente Resuelto **
El código anterior agrega correctamente una nueva lista de reproducción en 4.0.3
, pero no en 2.3
. Las únicas áreas problemáticas para 4.0.3
era que necesitaba asegurarme de que el DATE_MODIFIED
estaba configurado en la lista de reproducción y que PLAY_ORDER
estaba configurado en el elemento Playlist.
Todavía no tengo idea de por qué no crearía una lista de reproducción en 2.x, así que si alguien tiene alguna idea al respecto, me gustaría saberlo.
Gracias @MarkG. Eventualmente logré que esto funcionara. Parece que la razón por la que no funcionaba en mi dispositivo 2.x era que estaba ejecutando miui. Supongo que miui no está usando el proveedor de contenido de lista de reproducción estándar. Cuando reinvirtí el dispositivo con mod de cianógeno, todo funcionó. – stuckless
aplicación que se bloquea en esta línea mPlaylistId = c.getInt (c.getColumnIndex (MediaStore.Audio.Playlists._ID)); –
Nunca lo cambié de acuerdo a mis propias necesidades, solo para confirmar Cursor c = mCR.query (mUri, PROJECTION_PLAYLIST, null, null, MediaStore.Audio.Playlists.DATE_MODIFIED); if (c! = Null) { \t c.moveToLast(); –