Próbuję utworzyć nowy Playlist
, używając Androida ContentResolver
, który zostanie dodany do list odtwarzania odtwarzacza muzycznego, ale po uruchomieniu kodu wstawienie do listy odtwarzania zwróci wartość null (dla Uri
) i kiedy sprawdzam listy odtwarzania odtwarzacza muzycznego, mój nowy wpis Playlist
nie istnieje. Podejrzewam, że powodem, dla którego insert()
zwraca wartość null, jest to, że nie utworzyłem poprawnie listy odtwarzania. Czy ktoś mógłby wyjaśnić, jak dynamicznie tworzyć nową listę odtwarzania, biorąc pod uwagę, że mój kod nie działa. (Z moich poszukiwań znalazłem kilka sposób do kwerendy list odtwarzania, ale nic właściwie tworzy nową)Tworzenie nowej listy odtwarzania przy użyciu ContentResolver
Oto mój kod ...
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: częściowo rozwiązany **
Powyższy kod poprawnie dodaje nową listę odtwarzania na 4.0.3
, ale nie na 2.3
. Jedynymi problematycznymi obszarami dla 4.0.3
było to, że musiałem się upewnić, że DATE_MODIFIED
został ustawiony na liście odtwarzania i że PLAY_ORDER
został ustawiony na liście odtwarzania.
Wciąż nie mam pojęcia, dlaczego nie utworzyłaby listy odtwarzania na 2.x, więc jeśli ktoś ma jakiekolwiek przemyślenia na ten temat, chciałbym wiedzieć.
Dzięki @MarkG. W końcu udało mi się to osiągnąć. Wygląda na to, że powodem, dla którego nie działa on na moim urządzeniu 2.x, było uruchomienie miui. Domyślam się, że miui nie korzysta ze standardowego dostawcy treści na liście odtwarzania. Kiedy ponownie przymocowałem urządzenie modem cyjanu, wszystko działało. – stuckless
Awaria aplikacji w tej linii mPlaylistId = c.getInt (c.getColumnIndex (MediaStore.Audio.Playlists._ID)); –
nevermind i zmieniłem go zgodnie z moimi własnymi potrzebami, aby potwierdzić Kursor c = mCR.query (mUri, PROJECTION_PLAYLIST, null, null, MediaStore.Audio.Playlists.DATE_MODIFIED); if (c! = Null) { \t c.moveToLast(); –