Sto tentando di creare un nuovo Playlist
, utilizzando Android ContentResolver
, che verrà aggiunto alle playlist del lettore musicale, ma quando il codice viene eseguito, l'inserto nella playlist restituisce null (per il Uri
) e quando controllo le playlist del lettore musicale, la mia nuova voce Playlist
non è presente. Sospetto che il motivo per cui il numero insert()
restituisce null è perché non ho creato correttamente la playlist. Qualcuno potrebbe chiarire come creare dinamicamente una nuova playlist, dato che il mio codice non funziona. (Nella mia ricerca, ho trovato diversi modo per interrogare le playlist, ma niente in realtà crea uno nuovo)Come creare una nuova playlist utilizzando ContentResolver
Ecco il mio codice ...
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();
UPDATE: parzialmente risolto **
Il codice sopra riportato aggiunge correttamente una nuova playlist su 4.0.3
, ma non su 2.3
. Le uniche aree problematiche per 4.0.3
era che dovevo assicurarmi che il DATE_MODIFIED
sia stato impostato sulla playlist e che PLAY_ORDER
sia stato impostato sulla voce Playlist.
Non ho ancora idea del perché non creerebbe una playlist su 2.x, quindi se qualcuno ha qualche idea su questo, mi piacerebbe sapere.
Grazie a @MarkG. Alla fine l'ho fatto funzionare. Sembra che il motivo per cui non funzionava sul mio dispositivo 2.x era che stava eseguendo miui. Suppongo che miui non stia utilizzando il provider di contenuti di playlist standard. Quando ho rifatto il dispositivo con il cyanogen mod, tutto ha funzionato. – stuckless
arresto anomalo dell'app a questa riga mPlaylistId = c.getInt (c.getColumnIndex (MediaStore.Audio.Playlists._ID)); –
non l'ho modificato in base alle mie esigenze, solo per confermare Cursore c = mCR.query (mUri, PROJECTION_PLAYLIST, null, null, MediaStore.Audio.Playlists.DATE_MODIFIED); if (c! = Null) { \t c.moveToLast(); –