LoginSignup
0
1

More than 3 years have passed since last update.

Android11でメディアコントロールが出なかった。

Posted at

結論

きちんとMediaSessionにメタ情報を設定することでメディアコントロールが出ましたので、きちんとメタ情報が設定されているか確認をしましょう。


mediaMetadata = new MediaMetadataCompat.Builder();
    .putString(MediaMetadata.METADATA_KEY_TITLE, title) 
    .putString(MediaMetadata.METADATA_KEY_ARTIST, artistName)
    .putString(MediaMetadata.METADATA_KEY_ALBUM_ART_URI, imageUri)) 
    .putLong(MediaMetadata.METADATA_KEY_DURATION, duration)
    .build();
mediaSession.setMetadata(mediaMetadata)

またputLong(MediaMetadataCompat.METADATA_KEY_DURATION, -1);とすることで、シークバーを無効化することができますが、シークバー自体を消すことはできないようです。

経緯

AndroidにはMediaSessionという、外部デバイスなどからメディアが操作されたことをうまく制御する仕組みがあるのですが、
その中で、再生情報はMediaMetadataで管理するということになっています。
(詳しい記事はたくさんあるのでここでは詳しい解説は省きます。)

しかし、MediaMetadataとは別にデータを管理していたため設定せずに完結していたこと。
メタ情報を設定せずともAndroid11以前はプレイヤーの表示・操作ができていたため、メタ情報の設定がされていないことに気付きにくかった。

以上のことからメタ情報の設定がされていなかったことに現在まで気づくことができていませんでした。

最低限必要なメタ情報とメディアコントロールの表示の調査

Notificationのタイトル情報とMediaMetadataの関係を調査したところ以下のことがわかりました。

  • MediaMetadataに対応するデータがある場合メタ情報が表示に使用される。
  • 対応するメタ情報がないときはNotificationへ設定した値が表示される。
  • MediaMetadataの中身が空っぽでも、Notificationに設定した情報が表示される。

インスタンスを生成して渡すだけでNotificationの情報から表示がされるようですが、しっかりと設定しましょう。

あとがき

本当はAndroid11から追加されたバブルに触れてみたのですが、ギリギリまで試行錯誤して、
一部端末でバブルの機能が動かないという報告を発見して断念しました。
そちらについては確認次第また別の機会に記事にしようと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1