Tôi đang cố gắng tạo Playlist
mới bằng Android ContentResolver
, sẽ được thêm vào danh sách phát của trình phát nhạc, nhưng khi mã chạy, chèn vào danh sách phát sẽ trả về giá trị rỗng (cho Uri
) và khi tôi kiểm tra danh sách phát của trình phát nhạc, mục nhập Playlist
mới của tôi không có ở đó. Tôi nghi ngờ rằng lý do mà insert()
trả về null là vì tôi chưa tạo Danh sách phát một cách chính xác. Ai đó có thể làm rõ cách tạo động danh sách phát mới, vì mã của tôi không hoạt động. (Trong tìm kiếm của tôi, tôi đã tìm thấy một số cách để truy vấn danh sách nhạc, nhưng không thực sự tạo ra một cái mới)Cách tạo Danh sách phát mới bằng ContentResolver
Dưới đây là mã của tôi ...
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();
CẬP NHẬT: Một phần Giải Quyết **
Mã ở trên không thêm chính xác Danh sách phát mới trên 4.0.3
, nhưng không phải trên 2.3
. Các vùng sự cố duy nhất cho 4.0.3
là tôi cần đảm bảo rằng DATE_MODIFIED
được đặt trên Danh sách phát và PLAY_ORDER
được đặt trên mục Danh sách phát.
Tôi vẫn không biết tại sao nó sẽ không tạo danh sách phát trên 2.x, vì vậy nếu có ai có bất kỳ suy nghĩ nào về điều đó, tôi muốn biết.
Cảm ơn @MarkG. Cuối cùng tôi đã làm việc này. Có vẻ như lý do tại sao nó không hoạt động trên thiết bị 2.x của tôi là nó đang chạy miui. Tôi đoán miui không sử dụng nhà cung cấp nội dung danh sách phát chuẩn. Khi tôi reflashed thiết bị với mod Cyanogen, tất cả đều hoạt động. – stuckless
lỗi ứng dụng tại dòng này mPlaylistId = c.getInt (c.getColumnIndex (MediaStore.Audio.Playlists._ID)); –
nevermind i thay đổi nó theo nhu cầu của riêng tôi, chỉ để xác nhận Con trỏ c = mCR.query (mUri, PROJECTION_PLAYLIST, null, null, MediaStore.Audio.Playlists.DATE_MODIFIED); nếu (c! = Null) { \t c.moveToLast(); –