Media2

與其他應用程式共用媒體內容和控制項。
最近更新時間 穩定版 候選版 Beta 版 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。如果您發現新問題,或是有改進這個程式庫的建議,請告訴我們。回報新問題前,請先查看這個程式庫的現有問題。只要按一下星號按鈕,即可投票給現有的問題。

建立新問題

詳情請參閱 Issue Tracker 說明文件

1.3 版本

1.3.0 版本

2024 年 1 月 10 日

發布 androidx.media2:media2-*:1.3.01.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 為目標時的自訂 Parcelable 檢查。

1.2.0 版本

1.2.0 版本

2021 年 9 月 15 日

發布 androidx.media2:media2-*:1.2.01.2.0 版包含此連結所列的修訂項目。

自 1.1.0 版以來的重要異動

  • 能與 (prepare|play)From(MediaId|Uri|Search) AndroidX 媒體互通
  • 已在 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 版的修訂項目

新功能

  • 能與 (prepare|play)From(MediaId|Uri|Search) AndroidX 媒體互通

API 變更

  • 已將 MEDIA_URI_PATH_SET_MEDIA_URIMEDIA_URI_QUERY_URI 加入 MediaConstants 中

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.31.1.3 版包含以下修訂項目。

修正錯誤

  • 修正由於對區塊進行非必要同步處理所造成的死結問題

1.1.2 版本

1.1.2 版本

2021 年 1 月 27 日

發布 androidx.media2:media2-*:1.1.21.1.2 版包含以下修訂項目。

修正錯誤

1.1.1 版

1.1.1 版

2020 年 12 月 16 日

發布 androidx.media2:media2-*:1.1.11.1.1 版包含此連結所列的修訂項目。

修正錯誤

  • 目前的媒體項目有所改變時,能更新媒體通知。

1.1.0 版本

1.1.0 版本

2020 年 12 月 2 日

發布 androidx.media2:media2-*:1.1.01.1.0 版本包含以下修訂項目。

自 1.0.0 版起的重大異動

  • 新增處理媒體曲目之用的更多 API
  • 與 AndroidX 媒體庫的互通性更佳
    • 已新增「MediaSession#setMediaUri
    • 經由 MediaSession#getSessionCompatToken() 公開 MediaSessionCompat.Token

1.1.0-rc01 版本

2020 年 10 月 28 日

發布 androidx.media2:media2-*:1.1.0-rc011.1.0-rc01 版包含此連結所列的修訂項目。

  • 修正了 MediaController 在含有鎖定時通知回呼,可能造成死結的問題 (I76c56)
  • 修正 MediaSessionImplBase#isClosed() 在呼叫已釋出 MediaSessionCompat 上的 getCurrentControllerInfo() 時可能異常終止的問題。(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 版的修訂項

修正錯誤

  • 媒體項目有所更改時,可重設目前的位置
  • 連線時能傳送中繼資料和緩衝狀態
  • 修正在工作階段和控制器之間傳送大型資料時的異常終止問題
  • <queries> 新增至 Android 11 的 media 和 media2 資訊清單
  • 修正 MediaController.getPlaylist() 的 NPE
  • 不允許使用 seek 指令時停用 MediaControlView 的進度列
  • 工作階段目前的媒體項目有所更改時通知 PlaybackStateCompat
  • 修正 SessionPlayer.TrackInfo 的包裹處理

1.1.0-alpha01 版本

2020 年 6 月 24 日

發布 androidx.media2:media2-*:1.1.0-alpha011.1.0-alpha01 版包含以下修訂項目。

修正錯誤

  • 修正更新中繼資料時的時間性問題 (I45567b/143999611)
  • SessionResult 能保住 MediaItem 不受 PlayerResult 影響 (I927b0b/154885520)
  • 修正 MediaController#setVolumeTo() 可能會改變錯誤串流音量的問題。(I76870b/151204736)

1.0.3 版本

1.0.3 版本

2020 年 2 月 19 日

發布了 androidx.media2:media2-*:1.0.31.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.21.0.2 版的 media2-{common,player,session} 含有以下修訂項目1.0.2 版的 media2-widget 含有以下修訂項目

修正錯誤

  • 修正了 MediaPlayer#getSelectedTrack() 中的 IndexOutOfBoundsException。(aosp/987003)
  • 已改善 ExoPlayer 呼叫 getDuration() 但媒體項目不存在時的處理方法 (aosp/987484)
  • 修正在 IDLE 狀態下呼叫 getDuration() 時,ExoPlayer 不會擲出 IllegalStateException 的錯誤 (aosp/987246)
  • 不允許對 media2 使用自訂 Parcelable (aosp/1091056)
  • 修正造成 close() 懸宕的問題 (aosp/1096455)
  • MediaBrowser:已改善使用 MediaBrowserService 時對 subscribe() 中錯誤的處理 (aosp/1158057)
  • 已修正使用 Framework MediaSession 時 MediaController 異常中斷的問題(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.11.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 是下列 Media 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 中製作播放器,VideoView 可以採用 SessionPlayer 或 MediaController,讓應用程式更流暢地進入背景播放模式。
  • 已移除與 media2-player 程式庫的依附元件
  • 已新增「onViewTypeChangedListener

API 變更

  • 瀏覽權限從公開變更為受保護:
    • 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 外掛程式時,在依存元件的解析上可能會發生衝突。如果遇到與 ListenableFuture 相關的 Could not resolve all artifacts 錯誤,可在專案的建構設定中加入 android.dependency.useConstraints=false,以暫時解決問題。我們正在研擬 Android Gradle 外掛程式內的永久修正內容,不久將可發布。

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