Media2

与其他应用共享媒体内容和控件。
最新更新 稳定版 候选发布版 测试版 Alpha 版
2024年1月10日 1.3.0 - - -

声明依赖项

要添加对 Media2 的依赖项,您必须将 Google Maven 存储库添加到您的项目中。阅读Google 的 Maven 存储库以获取更多信息。

在应用或模块的 build.gradle 文件中添加所需工件的依赖项

Groovy

dependencies {
    def media2_version = "1.3.0"

    // Interacting with MediaSessions
    implementation "androidx.media2:media2-session:$media2_version"
    // optional - UI widgets for VideoView and MediaControlView
    implementation "androidx.media2:media2-widget:$media2_version"
    // optional - Implementation of a SessionPlayer
    implementation "androidx.media2:media2-player:$media2_version"
}

Kotlin

dependencies {
    val media2_version = "1.3.0"

    // Interacting with MediaSessions
    implementation("androidx.media2:media2-session:$media2_version")
    // optional - UI widgets for VideoView and MediaControlView
    implementation("androidx.media2:media2-widget:$media2_version")
    // optional - Implementation of a SessionPlayer
    implementation("androidx.media2:media2-player:$media2_version")
}

有关依赖项的更多信息,请参阅添加构建依赖项

反馈

您的反馈有助于使 Jetpack 变得更好。如果您发现新的问题或有改进此库的想法,请告诉我们。在创建新问题之前,请查看此库中现有的问题。您可以通过点击星形按钮为现有问题添加您的投票。

创建新问题

有关更多信息,请参阅问题跟踪器文档

版本 1.3

版本 1.3.0

2024年1月10日

androidx.media2:media2-*:1.3.0 已发布。 版本 1.3.0 包含这些提交。

自 1.2.0 以来的重要更改

  • androidx.media2 现已完全弃用。请改用 androidx.media3。

版本 1.3.0-rc01

2023年12月13日

androidx.media2:media2-*:1.3.0-rc01 已发布,与 Media2 1.3.0-beta01 没有变化。 版本 1.3.0-rc01 包含这些提交。

版本 1.3.0-beta01

2023年11月29日

androidx.media2:media2-*:1.3.0-beta01 已发布,与 Media2 1.3.0-alpha01 没有变化。 版本 1.3.0-beta01 包含这些提交。

版本 1.3.0-alpha01

2023年11月15日

androidx.media2:media2-*:1.3.0-alpha01 已发布。 版本 1.3.0-alpha01 包含这些提交。

API 更改

  • androidx.media2 现已完全弃用。请改用 androidx.media3。(I53164)

版本 1.2.1

版本 1.2.1

2022年2月9日

androidx.media2:media2-*:1.2.1 已发布。 版本 1.2.1 包含这些提交。

错误修复

  • 修复针对 API 33 的自定义 Parcelables 检查。

版本 1.2.0

版本 1.2.0

2021 年 9 月 15 日

androidx.media2:media2-*:1.2.0 已发布。 版本 1.2.0 包含以下提交。

自 1.1.0 版本以来的重要更改

  • 支持与 AndroidX media 的 (prepare|play)From(MediaId|Uri|Search) 的互操作性
  • MediaConstants 中添加了 MEDIA_URI_PATH_SET_MEDIA_URIMEDIA_URI_QUERY_URI

版本 1.2.0-rc01

2021 年 9 月 1 日

androidx.media2:media2-*:1.2.0-rc01 已发布。 版本 1.2.0-rc01 包含以下提交。

错误修复

版本 1.2.0-beta01

2021 年 6 月 30 日

androidx.media2:media2-*:1.2.0-beta01 已发布。 版本 1.2.0-beta01 包含以下提交。

新功能

  • 支持与 AndroidX media 的 (prepare|play)From(MediaId|Uri|Search) 的互操作性

API 更改

  • 在 MediaConstants 中添加了 MEDIA_URI_PATH_SET_MEDIA_URIMEDIA_URI_QUERY_URI

版本 1.2.0-alpha01

2021 年 4 月 21 日

androidx.media2:media2-*:1.2.0-alpha01 已发布。 版本 1.2.0-alpha01 包含以下提交。

API 更改

错误修复

  • 修复由于不必要的同步块导致的死锁问题。
  • 当没有可播放的项目时重置播放器
  • 允许 onCurrentMediaItemChanged 接收空媒体项目
  • 更改当前媒体项目时更新通知
  • 修复会话创建后立即与控制器兼容的问题

版本 1.1.3

版本 1.1.3

2021 年 4 月 21 日

androidx.media2:media2-*:1.1.3 已发布。 版本 1.1.3 包含以下提交。

错误修复

  • 修复由于不必要的同步块导致的死锁问题。

版本 1.1.2

版本 1.1.2

2021 年 1 月 27 日

androidx.media2:media2-*:1.1.2 已发布。 版本 1.1.2 包含以下提交。

错误修复

版本 1.1.1

版本 1.1.1

2020 年 12 月 16 日

androidx.media2:media2-*:1.1.1 已发布。 版本 1.1.1 包含以下提交。

错误修复

  • 更改当前媒体项目时更新媒体通知。

版本 1.1.0

版本 1.1.0

2020 年 12 月 2 日

androidx.media2:media2-*:1.1.0 已发布。 版本 1.1.0 包含以下提交。

自 1.0.0 版本以来的重大更改

  • 添加了更多用于处理媒体轨道的 API
  • 更好地支持与 AndroidX media 库的互操作性
    • 添加了 MediaSession#setMediaUri
    • 通过 MediaSession#getSessionCompatToken() 公开了 MediaSessionCompat.Token

版本 1.1.0-rc01

2020 年 10 月 28 日

androidx.media2:media2-*:1.1.0-rc01 已发布。 版本 1.1.0-rc01 包含以下提交。

  • 修复了 MediaController 在持有锁的同时通知回调的问题,从而导致潜在的死锁 (I76c56
  • 修复了在已释放的 MediaSessionCompat 上调用 getCurrentControllerInfo() 时,MediaSessionImplBase#isClosed() 可能崩溃的问题。(aosp/1423291]
  • 修复了 media2 MediaSession 未将活动队列项目 ID 设置为 PlaybackStateCompat 的问题 (aosp/1421652)
  • 在绑定到服务时添加了 BIND_INCLUDE_CAPABILITIES 标志,这允许无头媒体应用程序在具有权限的情况下访问位置。这对于 Android Auto 应用尤其有用。(aosp/1440731)

版本 1.1.0-beta01

2020 年 9 月 16 日

androidx.media2:media2-*:1.1.0-beta01 已发布。 版本 1.1.0-beta01 包含以下提交。

错误修复

  • 媒体项目更改时重置当前位置
  • 连接时发送元数据和缓冲状态
  • 修复会话和控制器之间发送大量数据时发生的崩溃问题
  • 为 Android 11 中的媒体和 media2 的清单添加 <queries>
  • 修复 MediaController.getPlaylist() 的 NPE 问题
  • 当不允许搜索命令时,禁用 MediaControlView 的进度条
  • 会话的当前媒体项目更改时,通知 PlaybackStateCompat
  • 修复 SessionPlayer.TrackInfo 的打包问题

版本 1.1.0-alpha01

2020 年 6 月 24 日

androidx.media2:media2-*:1.1.0-alpha01 已发布。 版本 1.1.0-alpha01 包含以下提交。

错误修复

版本 1.0.3

版本 1.0.3

2020 年 2 月 19 日

androidx.media2:media2-*:1.0.3 已发布。 版本 1.0.3 的 media2-{common,player,session} 包含以下提交版本 1.0.3 的 media2-widget 包含以下提交

错误修复

  • 修复使用空回调创建 MediaController 时出现的 NullPointerException 问题
  • 修复了在 MediaPlayer.setMediaItem 后未调用 onPlaylistChanged() 的问题

版本 1.0.2

版本 1.0.2

2020 年 2 月 5 日

androidx.media2:media2-*:1.0.2 已发布。 版本 1.0.2 的 media2-{common,player,session} 包含以下提交版本 1.0.2 的 media2-widget 包含以下提交

错误修复

  • 修复了 MediaPlayer#getSelectedTrack() 中的 IndexOutOfBoundsException。(aosp/987003)
  • 改进了 ExoPlayer 调用 getDuration() 且媒体项目不存在的情况的处理方式 (aosp/987484)
  • 修复了 ExoPlayer 在 IDLE 状态下调用 getDuration() 时不会抛出 IllegalStateException 的错误 (aosp/987246)
  • 不允许 media2 使用自定义 Parcelables (aosp/1091056)
  • 修复了导致 close() 挂起的问题 (aosp/1096455)
  • MediaBrowser:改进了使用 MediaBrowserServicesubscribe() 中错误的处理方式 (aosp/1158057)
  • 修复了 MediaController 与 Framework MediaSession 崩溃的问题 (aosp/1177663)
  • 建立连接时,不要通过回调通知会话信息 (aosp/1195030b/142925848)
  • 修复了 MediaController 可能意外地多次发送 SessionResult 的问题 (aosp/1198634)
  • 修复了 MediaController 可能向 MediaSession 发送不允许的命令的问题,因此 MediaSession 现在会发送 RESULT_ERROR_PERMISSION_DENIED (aosp/1204183)
  • 修复了 MediaControllerView#setPlayer 的不稳定问题 (aosp/987004)

版本 1.0.1

版本 1.0.1

2019 年 10 月 9 日

androidx.media2:media2-*:1.0.1 已发布。 版本 1.0.1 的 androidx.media2:media2-{player, session}:1.0.1 包含以下提交版本 1.0.1 的 androidx.media2:media2-widget:1.0.1 包含以下提交

错误修复

  • 修复在跨进程发送 MediaItem 的子类时出现的 RuntimeException 问题 (aosp/1098971)
  • 修复了 MediaPlayer 在播放播放列表时仅调用一次 onCurrentMediaItemChanged() 的问题
  • 修复了 MediaPlayer 可能会播放超过 2 个项目的播放列表的问题 (aosp/1108440)
  • 修复了即使 SurfaceView 不可见,播放器仍继续播放的问题
  • 修复了在调用 setPlayer 之前调用 setViewType 时出现的 VideoView 播放问题

版本 1.0.0

2019 年 9 月 5 日

androidx.media2:media2-*:1.0.0 已发布。 以下是 media2-{player, session}:1.0.0 中包含的提交,以及 media2-widget:1.0.0 中包含的提交

Media2 1.0.0 的主要功能

Media2 是下一代媒体 API,包括:MediaSessionMediaControllerMediaBrowserMediaBrowserServiceVideoViewMediaControlView

  • media2.player.MediaPlayer
    • API 大多与 android.media.MediaPlayer 匹配,底层引擎为 ExoPlayer
    • 内置音频焦点和噪声处理
    • 实现 SessionPlayer
  • media2.session.MediaSession
    • 提供细粒度的权限控制
    • 支持自定义布局
    • 易于与 SessionPlayer 配合使用,例如 androidx.media2.player.MediaPlayer
    • MediaControllerCompat 互操作
  • media2.session.MediaSessionService
    • MediaLibraryService 的轻量级版本
    • 为后台播放提供服务生命周期管理
    • MediaControllerCompatMediaBrowserServiceCompat 互操作
  • media2.session.MediaLibraryService
    • 支持更好的分页功能,用于浏览包含大量项目的媒体项目或搜索结果
    • MediaControllerCompatMediaBrowserServiceCompat 互操作
  • media2.session.MediaController
    • 可以连接到 MediaSessionMediaSessionServiceMediaLibraryService
    • MediaSessionCompatMediaBrowserServiceCompat 互操作
  • media2.session.MediaBrowser
    • 继承自 MediaController
    • 可以连接到 MediaSessionMediaSessionServiceMediaLibraryService
    • MediaSessionCompatMediaBrowserServiceCompat 互操作
  • media2.widget.VideoView
    • 包含 android.widget.VideoView 的所有功能
    • 提供在 TextureViewSurfaceView 之间切换的功能
    • 可以与 MediaSession 协同工作
  • media2.widget.MediaControlView
    • 更好的外观和体验
    • 包含 android.widget.MediaController 的所有功能
    • 提供字幕轨道选择、播放速度选择和全屏模式

版本 1.0.0-rc02

2019 年 8 月 22 日

androidx.media2:media2-*:1.0.0-rc02 已发布,此版本中包含的更改可以在 此处找到。此版本包含 androidx.media2:media2-widget:1.0.0-rc02,此版本中包含的更改可以在 此处找到。

新功能

  • MediaControlView 属于 VideoView 时,不再允许通过 MediaControlView (MCV) 调用 setPlayersetController

错误修复

  • MediaControlView:只有当存在下一个或上一个媒体项目时,下一个和上一个按钮才可点击
  • MediaControlView:修复了调用 onAttachedToWindow() 时出现不稳定的 NullPointerException 的问题
  • 当当前媒体项目更改时,Media2 Widget 现在可以正确处理新媒体项目的元数据

Media2-Widget 版本 1.0.0-beta01

2019 年 7 月 2 日

androidx.media2:media2-widget:1.0.0-beta01 已发布。此版本中包含的提交可以在 此处找到。

新功能

  • 后台播放:VideoView 可以获取 SessionPlayer 或 MediaController,而不是在 VideoView 内部创建播放器,这样应用程序可以无缝切换到后台播放模式。
  • 删除了与 media2-player 库的依赖关系
  • 添加了 onViewTypeChangedListener

API 更改

  • 可见性从 public 更改为 protected
    • VideoView.onMeasure(int, int)
    • VideoView.onAttachedToWindow()
    • VideoView.onDetachedFromWindow()
    • MediaControlView.onMeasure(int, int)
  • 已移除
    • VideoView.getSessionToken()
    • VideoView.setAudioAttributes(AudioAttributesCompat)
    • VideoView.setMedaItem(MediaItem)
    • MediaControlView.setSessionToken(SessionToken)
  • 已添加
    • VideoView.setMediaController(MediaController)
    • VideoView.getMediaControlView()
    • VideoView.setMediaController(MediaController)
    • VideoView.setPlayer(SessionPlayer)
    • VideoView.setOnViewTypeChangedListener()
    • MediaControlView.setPlayer(SessionPlayer)
    • MediaControlView.setMediaController(MediaContoller)

版本 1.0.0-rc01

2019 年 6 月 18 日

androidx.media2:media2-common:1.0.0-rc01androidx.media2:media2-player:1.0.0-rc01androidx.media2:media2-session:1.0.0-rc01 已发布。此版本中包含的提交可以在 此处找到。

API 更改

  • ListenableFuture 的依赖关系已迁移回 Guava 的独立实现。

  • 请注意,如果您有依赖于完整 Guava 工件的测试目标,则在使用某些版本的 Android Gradle Plugin 时可能会遇到依赖项解析冲突。如果您遇到涉及 ListenableFutureCould not resolve all artifacts 错误,则可以通过将 android.dependency.useConstraints=false 添加到项目的构建配置中来临时解决此问题。我们目前正在 Android Gradle Plugin 中开发一个永久性修复程序,该修复程序将在以后的日期发布。

版本 1.0.0-beta02

2019 年 6 月 5 日

androidx.media2:media2-common:1.0.0-beta02androidx.media2:media2-player:1.0.0-beta02androidx.media2:media2-session:1.0.0-beta02 已发布。此版本中包含的提交可以在 此处找到。

错误修复

  • 在 androidx.media.player.MediaPlayer 上设置负播放速度将返回 RESULT_ERROR_BAD_VALUE。
  • 将 Guava ListenableFuture 替换为 Jetpack 实现(aosp/968828

版本 1.0.0-beta01

2019 年 5 月 7 日

androidx.media2:media2-common:1.0.0-beta01androidx.media2:media2-player:1.0.0-beta01androidx.media2:media2-session:1.0.0-beta01 已发布。此版本中包含的提交可以在 此处找到。

新功能

  • 库被分成 3 个部分:media2-common、media2-player、media2-session
  • 将标记为 @NonNull 的空参数的 IllegalPointerException 更改为 NullPointerException

API 更改

  • 引入了 MediaController.Builder
  • FileMediaItem.Builder 的可选字段添加了 setter 方法
  • MediaControllerMediaBrowser 可以将应用程序的连接提示发送到 MediaSessionMediaSessionServiceMediaLibraryService
  • 一些方法已重命名以遵循 Android 10 Media2 API

版本 1.0.0-alpha04

2018 年 12 月 17 日

API 更改

  • 重命名了以下类
    • MediaPlayer2MediaPlayer
    • MediaSession2MediaSession
    • MediaController2MediaController
    • MediaSessionService2MediaSessionService
    • MediaLibraryService2MediaLibraryService
    • MediaBrowser2MediaBrowser
    • MediaMetadata2MediaMetadata
    • Rating2Rating
    • SessionToken2SessionToken
    • SessionCommand2SessionCommand
    • SessionCommandGroup2SessionCommandGroup
  • 合并了以下类
    • DataSourceDesc2MediaItem2 已合并为 MediaItem
    • MediaPlaylistAgentMediaPlayerConnector 已合并为 SessionPlayer
  • 添加了以下 Rating 的子类:HeartRatingPercentageRatingStarRatingThumbRating
  • Media2 现在使用 ListenableFuture 用于异步方法