Android'in ContentResolver
'u kullanarak, müzik çaların çalma listelerine eklenecek yeni bir Playlist
oluşturmaya çalışıyorum, ancak kod çalıştığında, oynatma listesine ekleme null değerini döndürür. Uri
) ve müzik çaların çalma listelerini kontrol ettiğimde yeni Playlist
girişim yok. insert()
'un null olması nedeninin, Playlist'i doğru şekilde oluşturmadığımdan şüpheleniyorum. Birisi, kodumun çalışmadığı sürece dinamik olarak yeni bir oynatma listesi oluşturmayı nasıl açıklayabileceğini açıklayabilir.ContentResolver'ı kullanarak yeni bir Çalma listesi oluşturma
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();
GÜNCELLEME ... (benim arama, ben çalma listeleri sorgulamak için birkaç yol buldum, ama hiçbir şey aslında yeni bir tane oluşturur) İşte
benim kod: Kısmen Çözüldü **
Yukarıdaki kod, 4.0.3
numaralı yeni bir Çalma Listesini doğru şekilde ekliyor, ancak 2.3
'da değil. 4.0.3
için tek sorun alanları, Oynatma Listesi'nde DATE_MODIFIED
'un ayarlandığından ve Oynatma Listesi öğesinde PLAY_ORDER
'un ayarlandığından emin olmaktı.
Niçin 2.x'te bir oynatma listesi oluşturmayacağına dair hiçbir fikrim yok. Bu nedenle, üzerinde herhangi bir düşünce varsa, bilmek isterim.
Teşekkürler @MarkG. Sonunda işe yaradım. Benim 2.x cihazımda çalışmamanın sebebinin miui çalıştığıydı. Tahminimce miui standart oynatma listesi içerik sağlayıcısını kullanmıyor. Cihazı siyanojen mod ile tekrar çektiğimde, hepsi işe yaradı. – stuckless
uygulaması bu satırda çöküyor mPlaylistId = c.getInt (c.getColumnIndex (MediaStore.Audio.Playlists._ID)); –
nevermind kendi gereksinimlerime göre değiştirdim, sadece onaylamak için İmleç c = mCR.query (mUri, PROJECTION_PLAYLIST, null, null, MediaStore.Audio.Playlists.DATE_MODIFIED); if (c! = Null) \t c.moveToLast(); –