So erstellen Sie eine neue Wiedergabeliste mit ContentResolver
Ich versuche, eine neue zu erstellen Playlist
mit Android ContentResolver
werden Hinzugefügt Musik-player-Wiedergabelisten, aber wenn der code ausgeführt wird, wird das einfügen in die playlist gibt null (für die Uri
) und wenn ich den Musik-player-Wiedergabelisten, meine neue Playlist
Eintrag gibt es nicht. Ich vermute, dass der Grund dafür, dass die insert()
null zurückgegeben ist, weil ich noch nicht erstellt, die Playlist richtig. Könnte jemand klären, wie Sie dynamisch erstellen Sie eine neue Wiedergabeliste, gegeben, dass mein code nicht funktioniert. (In meiner Suche, die ich gefunden habe, mehrere Wege, um Abfrage-Playlisten, aber nichts tatsächlich eine neue erstellt)
Hier ist mein code...
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: Teilweise Gelöst **
Den oben aufgeführten code nicht richtig fügen Sie eine neue Wiedergabeliste auf 4.0.3
, aber nicht auf 2.3
. Das einzige problem, das Bereiche für 4.0.3
war, dass ich brauchte, um sicherzustellen, dass die DATE_MODIFIED
wurde auf der Playlist PLAY_ORDER
wurde auf der Playlist-item.
Habe ich noch keine Ahnung, warum wäre es nicht eine playlist erstellen, die auf 2.x, also wenn jemand irgendwelche Gedanken auf, dass, würde ich mag wissen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist der code, den ich verwenden, in der eine benutzerdefinierte gebaut AsyncTask und es funktioniert auf 2.3, 3.1 und 4.03:
Um die korrekte Uri zu add playlist Mitglieder, müssen Sie die Id. Hinzufügen songs in die playlist, müssen Sie auch wissen, die aktuelle high-water-mark von PLAYORDER in die playlist aktuellen Stand. Ansonsten ist der MediaStore ContentResolver wird-gag, weil Sie versuchen, zu Playliste einfügen-Mitglieder mit dem gleichen Spiel um. So müssen Sie für die Abfrage der Playlist Uri, zunächst zu der höchsten PLAYORDER-Wert, und verwenden Sie diese als Ausgangspunkt für Ihre ContentValues Einsätze.
Ich habe nur versucht, das einfügen einer playlist-Mitglied in einer Zeit, aber in der Theorie könnten Sie in der Lage sein zu tun, einer bulk insert. Der code unten ist eingerichtet, um zu konvertieren, um ein bulk insert in die Zukunft, aber derzeit nur eine einfügen zu einer Zeit. Es dauert einen cursor von MediaStore.Audio.Media songs und fügt Sie in eine Wiedergabeliste Id, die gespeichert wurde in SharedPreferences.