1

コンテンツ リゾルバーを使用して曲を取得する方法は 2 つあります。1 つは携帯電話ですべての曲を取得するために使用し、もう 1 つは携帯電話からすべてのプレイリストを取得するために使用します。次に、プレイリストごとに曲を取得してプレイリスト オブジェクトに追加します。これを行うには、すべての曲のリストを検索して、プレイリストの ID と一致する ID を探します。問題は、ID が一致しないことです。私は元のために確かに知っています。1 つのプレイリストには 3 曲ありますが、見つかった ID は曲の ID とはまったく異なります。これは、すべての曲を取得するために使用する方法です。

public ArrayList<Song> getSongList(){
        ArrayList<Song> songs = new ArrayList<Song>();
        //query external audio
        ContentResolver musicResolver = getContentResolver();
        Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
        //iterate over results if valid
        if(musicCursor!=null && musicCursor.moveToFirst()){
            //get columns
            int titleColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
            int idColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID);
            int artistColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.ARTIST);
            int albumColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.ALBUM);
            int durationColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.DURATION);
            int dataColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.DATA);
            int displayNameColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.DISPLAY_NAME);
            //add songs to list
            do {
                String name;
                if(musicCursor.getString(titleColumn)==null || musicCursor.getString(titleColumn).isEmpty()) name=musicCursor.getString(displayNameColumn);
                else name=musicCursor.getString(titleColumn);

                songs.add(new Song(musicCursor.getLong(idColumn), name, musicCursor.getString(albumColumn), musicCursor.getString(artistColumn), musicCursor.getString(durationColumn), musicCursor.getString(dataColumn)));


            } 
            while (musicCursor.moveToNext());
        }

そして、これはプレイリスト用のものです:

public void getPlayists() {
    playlists = new ArrayList<Playlist>();
    // query external audio
    String[] projection = {
            android.provider.MediaStore.Audio.Playlists._ID,
            android.provider.MediaStore.Audio.Playlists.NAME };

    String[] projectionPl = { 
            android.provider.MediaStore.Audio.Media._ID,
            android.provider.MediaStore.Audio.Media.TITLE };

    ContentResolver resolver = context.getContentResolver();

    Uri playlistsUri = android.provider.MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
    Cursor playlistsCursor = resolver.query(playlistsUri, projection, null,
            null, null);
    // iterate over results if valid
    if (playlistsCursor != null && playlistsCursor.moveToFirst()) {
        // get columns
        int idColumn = playlistsCursor
                .getColumnIndex(android.provider.MediaStore.Audio.Playlists._ID);
        int nameColumn = playlistsCursor
                .getColumnIndex(android.provider.MediaStore.Audio.Playlists.NAME);
        // add songs to list

        do {
            long id = playlistsCursor.getLong(idColumn);

            Playlist pl = new Playlist(
                    playlistsCursor.getString(nameColumn), id);

            Cursor plCursor = resolver.query(
                    android.provider.MediaStore.Audio.Playlists.Members
                            .getContentUri("external", id), projectionPl,
                    null, null, null);

            if (plCursor != null && plCursor.moveToFirst()) {
                // get columns
                int idColumna = plCursor
                        .getColumnIndex(android.provider.MediaStore.Audio.Media._ID);
                int nameColumna = plCursor
                        .getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
                // add songs to list
                do {
                    long ida = plCursor.getLong(idColumna);

                    String title = plCursor.getString(nameColumna);

                    for (Song song : songs) {

                        if (song.id == ida) {
                            pl.addSong(song);
                        }
                    }

                } while (plCursor.moveToNext());
            }
            playlists.add(pl);

        } while (playlistsCursor.moveToNext());
    }

誰かが曲の ID がどのように機能するか、またはメソッドを変更して機能させるにはどうすればよいかを正確に説明できますか? ありがとう。

4

1 に答える 1

2

あなたのプレイリストカーソルは android.provider.MediaStore.Audio.Playlists.Members に反していますが、プレイリストカーソルから値を取得しますが、プレイリストの返される構造は次のとおりです。

        values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, playorder);
        values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, audio_id);

オーディオIDを探している場合は、変更してください

    int idColumn = playlistsCursor
            .getColumnIndex(android.provider.MediaStore.Audio.Playlists._ID);

    int idColumn = playlistsCursor
            .getColumnIndex(MediaStore.Audio.Playlists.Members.AUDIO_ID);

追伸: プレイリストなどを作成するコードを以前に投稿しました。追加機能については、Google Play または Amazon App Store でアプリの Playlist Manager を参照してください。

于 2014-07-07T08:41:41.680 に答える