Как загрузить музыкальные файлы в MusicBrowerService?

У меня трудное время для внедрения My Local Music Fragment в сервис Music Browser. Я пытаюсь сделать самый простой способ сделать музыкальный проигрыватель.

Я знаю, что в Google есть тонны кода музыкального проигрывателя. Но очень немногие используют архитектуру Google.

Вот как я загружаю данные в локальный музыкальный фрагмент

    public static ArrayList<Audio> audioList;

public void LoadMediaList() {
    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor cursor = null;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
        cursor = Objects.requireNonNull(getActivity()).getContentResolver().query(uri, null, null, null, MediaStore.MediaColumns.TITLE);
    }
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            audioList = new ArrayList<>();
            do {
                String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
                String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
                String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
                String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
                long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
                if (duration == 0.0 || duration > 10000) {
                    Audio s = new Audio(name, artist, url, album);
                    audioList.add(s);
                }
            } while (cursor.moveToNext());
        }
        cursor.close();
        songAdapter = new SongAdapter(getActivity(), audioList);
    }
}

Это основной код, который я нашел на codeLabs для службы Music Browser. Как я могу интегрировать данные в музыкальной библиотеке. Я не могу понять, как я могу использовать приведенный ниже код с моим audioList, который содержит все музыкальные данные.

public class MediaPlayerService extends MediaBrowserServiceCompat {

    private MediaSessionCompat mSession;
    private PlaybackManager mPlayback;

    final MediaSessionCompat.Callback mCallback =
            new MediaSessionCompat.Callback() {
                @Override
                public void onPlayFromMediaId(String mediaId, Bundle extras) {
                    mSession.setActive(true);
                    MediaMetadataCompat metadata = MusicLibrary.getMetadata(MediaPlayerService.this, mediaId);
                    mSession.setMetadata(metadata);
                    mPlayback.play(metadata);
                }

                @Override
                public void onPlay() {
                    if (mPlayback.getCurrentMediaId() != null) {
                        onPlayFromMediaId(mPlayback.getCurrentMediaId(), null);
                    }
                }

                @Override
                public void onPause() {
                    mPlayback.pause();
                }

                @Override
                public void onStop() {
                    stopSelf();
                }

                @Override
                public void onSkipToNext() {
                    onPlayFromMediaId(MusicLibrary.getNextSong(mPlayback.getCurrentMediaId()), null);
                }

                @Override
                public void onSkipToPrevious() {
                    onPlayFromMediaId(MusicLibrary.getPreviousSong(mPlayback.getCurrentMediaId()), null);
                }
            };

    @Override
    public void onCreate() {
        super.onCreate();

        // Start a new MediaSession
        mSession = new MediaSessionCompat(this, "MusicService");
        mSession.setCallback(mCallback);
        mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
        setSessionToken(mSession.getSessionToken());

        // TODO: Uncomment the following line to show a notification
        final MediaNotificationManager mediaNotificationManager = new MediaNotificationManager(this);

        mPlayback = new PlaybackManager(this, new PlaybackManager.Callback() {
            @Override
            public void onPlaybackStatusChanged(PlaybackStateCompat state) {
                mSession.setPlaybackState(state);

                // TODO: Uncomment the following line to show a notification
                mediaNotificationManager.update(mPlayback.getCurrentMedia(), state, getSessionToken());
            }
        });
    }

    @Override
    public void onDestroy() {
        mPlayback.stop();
        mSession.release();
    }

    @Override
    public BrowserRoot onGetRoot(String clientPackageName, int clientUid, Bundle rootHints) {
        return new BrowserRoot(MusicLibrary.getRoot(), null);
    }

    @Override
    public void onLoadChildren(
            final String parentMediaId, final Result<List<MediaBrowserCompat.MediaItem>> result) {
        result.sendResult(MusicLibrary.getMediaItems());
    }
}

Этот вопрос слишком велик, чтобы ответить, пожалуйста, потерпите меня. Я только начинающий и пытаюсь понять архитектуру музыки, чтобы поделиться учебником по созданию музыкального плеера с использованием архитектуры Google.

0 ответов

Другие вопросы по тегам