का उपयोग कर एक नई प्लेलिस्ट कैसे बनाएं I एंड्रॉइड के ContentResolver
का उपयोग करके एक नया Playlist
बनाने का प्रयास कर रहा है, जिसे संगीत प्लेयर की प्लेलिस्ट में जोड़ा जाएगा, लेकिन जब कोड चलता है, तो प्लेलिस्ट में डालने से शून्य मिलती है (के लिए Uri
) और जब मैं संगीत प्लेयर की प्लेलिस्ट की जांच करता हूं, तो मेरी नई Playlist
प्रविष्टि नहीं है। मुझे संदेह है कि insert()
शून्य लौटाता है क्योंकि मैंने प्लेलिस्ट को सही तरीके से नहीं बनाया है। क्या कोई यह स्पष्ट कर सकता है कि गतिशील रूप से एक नई प्लेलिस्ट कैसे बनाएं, यह देखते हुए कि मेरा कोड काम नहीं करता है। (मेरी खोज में, मैं कई तरह से प्लेलिस्ट क्वेरी करने के लिए मिल गया है, लेकिन कुछ भी वास्तव में उसकी जगह एक नया)ContentResolver
यहाँ मेरी कोड है ...
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();
अद्यतन: आंशिक रूप से हल **
उपरोक्त कोड 4.0.3
पर एक नई प्लेलिस्ट सही ढंग से जोड़ता है, लेकिन 2.3
पर नहीं। के लिए एकमात्र समस्या क्षेत्र यह था कि मुझे यह सुनिश्चित करने की आवश्यकता है कि DATE_MODIFIED
प्लेलिस्ट पर सेट किया गया था और PLAY_ORDER
प्लेलिस्ट आइटम पर सेट किया गया था।
मुझे अभी भी पता नहीं है कि यह 2.x पर प्लेलिस्ट क्यों नहीं बनाएगा, इसलिए अगर किसी के पास कोई विचार है, तो मैं जानना चाहता हूं। आप ईद की जरूरत
ContentValues mInserts = new ContentValues();
mInserts.put(MediaStore.Audio.Playlists.NAME, mPrefs.getString(AM.MEDIASTORECHANGE_NEWPLAYLISTNAME, "New Playlist"));
mInserts.put(MediaStore.Audio.Playlists.DATE_ADDED, System.currentTimeMillis());
mInserts.put(MediaStore.Audio.Playlists.DATE_MODIFIED, System.currentTimeMillis());
mUri = mCR.insert(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, mInserts);
if (mUri != null) {
mPlaylistId = -1;
mResult = FM.SUCCESS;
c = mCR.query(mUri, PROJECTION_PLAYLIST, null, null, null);
if (c != null) {
// Save the newly created ID so it can be selected. Names are allowed to be duplicated,
// but IDs can never be.
mPlaylistId = c.getInt(c.getColumnIndex(MediaStore.Audio.Playlists._ID));
c.close();
}
if (DBG.AUDIO) {
Log.d(TAG, "PLAYLIST_ADD - mPlaylistId: " + mPlaylistId
+ " mSelectString: " + mSelectString + " mUri: "+ mUri.toString());
}
}
public static final String[] PROJECTION_PLAYLIST = new String[] {
MediaStore.Audio.Playlists._ID,
MediaStore.Audio.Playlists.NAME,
MediaStore.Audio.Playlists.DATA
};
सही उरी प्लेलिस्ट सदस्य जोड़ने के लिए प्राप्त करने के लिए,:
धन्यवाद @ मार्कग। अंततः मुझे यह काम मिल गया। ऐसा लगता है कि यह मेरे 2.x डिवाइस पर काम नहीं कर रहा था यह था कि यह miui चल रहा था। मुझे लगता है कि miui मानक प्लेलिस्ट सामग्री प्रदाता का उपयोग नहीं कर रहा है। जब मैंने साइनोजन मोड के साथ डिवाइस को रीफ्लैश किया, तो यह सब काम किया। – stuckless
ऐप इस लाइन पर क्रैश हो रहा है mPlaylistId = c.getInt (c.getColumnIndex (MediaStore.Audio.Playlists._ID)); –
मैंने कभी भी अपनी खुद की जरूरतों के अनुसार इसे बदल दिया, बस कर्सर सी = mCR.query (mUri, PROJECTION_PLAYLIST, null, null, mediaStore.Audio.Playlists.DATE_MODIFIED) की पुष्टि करने के लिए; अगर (सी! = शून्य) { \t c.moveToLast(); –