Ich versuche, eine neue Playlist
zu erstellen, die ContentResolver
von Android verwendet, die den Wiedergabelisten des Musik-Players hinzugefügt wird, aber wenn der Code ausgeführt wird, gibt die Einfügung in die Playlist null zurück (für die Uri
) und wenn ich die Wiedergabelisten des Musik-Players überprüfe, ist mein neuer Eintrag Playlist
nicht da. Ich vermute, dass der Grund dafür, dass insert()
null zurückgibt, ist, weil ich die Playlist nicht korrekt erstellt habe. Könnte jemand erklären, wie man dynamisch eine neue Wiedergabeliste erstellt, da mein Code nicht funktioniert. (In meiner Suche, ich habe festgestellt, mehrere Art und Weise Playlisten abfragen, aber nichts schafft tatsächlich einen neuen)Erstellen einer neuen Playlist mit ContentResolver
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 **
Der obige Code fügt korrekt eine neue Playlist unter 4.0.3
hinzu, aber nicht unter 2.3
. Das einzige Problem Bereiche für 4.0.3
war, dass ich sicherstellen musste, dass die DATE_MODIFIED
wurde auf der Playlist gesetzt und dass PLAY_ORDER
wurde auf der Playlist Artikel eingestellt.
Ich habe immer noch keine Idee, warum es keine Playlist auf 2.x erstellen würde, also wenn jemand darüber Gedanken hat, würde ich gerne wissen.
Dank @MarkG. Ich habe schließlich das funktioniert. Es scheint, dass der Grund, warum es nicht auf meinem 2.x-Gerät funktionierte, war, dass es miui lief. Ich vermute, miui verwendet nicht den Standard-Playlist-Content-Provider. Als ich das Gerät mit Cyanomod umflaggte, hat alles funktioniert. – stuckless
App stürzt bei dieser Zeile ab mPlaylistId = c.getInt (c.getColumnIndex (MediaStore.Audio.Playlists._ID)); –
grevermind ich änderte es nach meinen eigenen Bedürfnissen, nur um zu bestätigen Cursor c = MCR.query (mUri, PROJECTION_PLAYLIST, null, null, MediaStore.Audio.Playlists.DATE_MODIFIED); if (c! = Null) { \t c.moveToLast(); –