Как создать новый плейлист с помощью ContentResolver

Я пытаюсь создать новый Плейлист, используя Android ContentResolver, который будет добавлен в плейлисты музыкального проигрывателя, но когда код запускается, вставка в плейлист возвращает значение null (для Uri), и когда я проверяю плейлисты музыкального проигрывателя, моей новой записи Playlistнет. Я подозреваю, что причина, по которой insert()возвращает значение null, заключается в том, что я неправильно создал плейлист. Может кто-нибудь уточнит, как динамически создавать новый плейлист, учитывая, что мой код не работает. (В своем поиске я нашел несколько способов запроса плейлистов, но ничто на самом деле не создает новый)

Вот мой код...

    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. Единственная проблемная область для 4.0.3заключалась в том, что мне нужно было убедиться, что DATE_MODIFIEDустановлен в плейлисте, а PLAY_ORDERустановлен в элементе Плейлист.

Я до сих пор понятия не имею, почему он не создаст плейлист на 2.x, поэтому, если у кого-то есть какие-либо мысли по этому поводу, я хотел бы знать.

7
задан stuckless 17 June 2012 в 21:23
поделиться