📜  媒体风格依赖 androidx - Java (1)

📅  最后修改于: 2023-12-03 15:25:01.798000             🧑  作者: Mango

媒体风格依赖 androidx - Java

Androidx是Android官方提供的工具包,为开发者提供各种便利的类和库。媒体风格依赖是其中的一个支持库,它可用于在Android应用中实现Navigation Drawer和一致的Material Design的媒体样式。

1. 添加依赖

build.gradle文件中添加以下依赖项:

dependencies {
    implementation 'androidx.media:media:1.0.0'
}
2. 实现媒体样式

媒体风格提供了一个简单的方法来实现以下效果:

  • 延迟加载音频的位图
  • 在转换实现时对Toolbar的高度或播放暂停控件重新布局。
  • 在状态栏更改时更新背景

在布局文件中添加媒体视图控件:

<androidx.media.widget.MediaView
    android:id="@+id/media_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

在代码中使用MediaControlView类:

MediaControlView controlView = findViewById(R.id.controlView);
MediaView mediaView = findViewById(R.id.mediaView);
mediaView.setControlView(controlView);
3. 设置媒体数据

使用MediaMetadataCompat类来设置媒体数据:

MediaMetadataCompat.Builder mediaMetadataBuilder = new MediaMetadataCompat.Builder()
                .putString(MediaMetadataCompat.METADATA_KEY_TITLE, "Song title")
                .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, "Artist")
                .putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, "https://image_url.jpg")
                .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, 320000)
                .putString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI, "https://song_url.mp3");

设置媒体控制器:

MediaControllerCompat mediaController = new MediaControllerCompat(context, sessionToken);
MediaControllerCompat.setMediaController(activity, mediaController);
4. 绑定媒体控制器

使用MediaSessionCompat类来创建MediaSession实例:

ComponentName componentName = new ComponentName(context, MediaPlaybackService.class);
MediaSessionCompat mediaSession = new MediaSessionCompat(context, "tag", componentName, null);

将媒体控制器与媒体会话绑定:

MediaControllerCompat mediaController = new MediaControllerCompat(context, mediaSession.getSessionToken());
mediaController.registerCallback(callback);
mediaSession.setActive(true);
mediaControllerCompat.setMediaController(mediaController);
5. 使用媒体选择器

使用MediaBrowserCompat类可以搜索和查看媒体内容:

MediaBrowserCompat.ConnectionCallback connectionCallback = new MediaBrowserCompat.ConnectionCallback() {
    @Override
    public void onConnected() {
        MediaBrowserCompat mediaBrowser = new MediaBrowserCompat(this, new ComponentName(context, MediaPlaybackService.class), connectionCallback, null);
        MediaBrowserCompat.MediaItem item = new MediaBrowserCompat.MediaItem(mediaMetadataCompat.getDescription(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE);
        mediaBrowserCompat.subscribe(item.getMediaId(), new MediaBrowserCompat.SubscriptionCallback() {...});
        mediaBrowserCompat.connect();
    }
};

在回调函数中使用媒体记载器:

MediaSessionCompat mediaSession = new MediaSessionCompat(this, "tag");
MediaControllerCompat mediaController = new MediaControllerCompat(context, mediaSession.getSessionToken());
MediaControllerCompat.setMediaController(activity, mediaController);
mediaController.registerCallback(callback);

MediaBrowserCompat mediaBrowser = new MediaBrowserCompat(this, new ComponentName(context, MediaPlaybackService.class), connectionCallback, null);
mediaBrowserCompat.subscribe("media_root_id", new MediaBrowserCompat.SubscriptionCallback() {...});

MediaBrowserCompat.MediaItem item = new MediaBrowserCompat.MediaItem(mediaMetadataCompat.getDescription(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE);
MediaDescriptionCompat description = item.getDescription();
mediaControllerCompat.getTransportControls().playFromMediaId(description.getMediaId(), null);
总结

媒体风格依赖是一种非常有用的功能,能够帮助开发者在Android应用中实现类似媒体播放器的UI。通过实现该依赖项,您可以更轻松地处理媒体内容,同时拥有更好的用户体验。