「この曲なに?」カードを表示する

音声を再生する TV アプリは、ユーザーがホーム画面に戻るか別のアプリに切り替えた後も再生を継続できます。そのためには、アプリでホーム画面に この曲なに? カードを表示する必要があります。このカードにより、ユーザーは音声の再生元を把握し、アプリに戻ってメディアの再生を操作できます。

アクティブな MediaSession が存在するとき、Android フレームワークはホーム画面に [再生しています] カードを表示します。カードにはアルバムアート、タイトル、アプリアイコンといったメディアのメタデータが表示されます。ユーザーがカードを選択すると、アプリが開きます。

「この曲なに?」カード

メディア セッションを実装し、セッションをアクティブに設定して、オーディオ フォーカスをリクエストすると、[再生しています] カードが表示されます。

注: [再生しています] カードは、FLAG_HANDLES_TRANSPORT_CONTROLS フラグが設定されたメディア セッションに対してのみ表示されます。このフラグは API レベル 26 で非推奨になりました。ただし、下位互換性のため、古いデバイスではこのフラグが引き続き必要になる可能性があります。

setActive(false) の呼び出しによりメディア セッションが無効になった場合、または別のアプリがメディアの再生を開始した場合、このカードはランチャー画面から削除されます。再生が完全に停止した場合は、アクティブなメディアがなければ、メディア セッションを直ちに無効にします。再生が一時停止した場合は、しばらく待機してから(通常は 5 ~ 30 分後)メディア セッションを無効にします。

カードを更新する

アプリが MediaSession で再生ステータスを更新するたびに、[再生しています] カードが更新され、現在のメディアの状態が表示されます。方法については、再生状態を更新するをご覧ください。

同様に、アプリは MediaMetadata を更新して、現在のメディアに関する情報(タイトル、サブタイトル、各種のアイコンなど)を [再生しています] カードに表示できます。方法については、メディア メタデータを更新するをご覧ください。

ユーザー アクションに応答する

ユーザーが この曲なに? カードを選択すると、セッション中のアプリが開きます。アプリが PendingIntentsetSessionActivity() に提供した場合は、次のコード スニペットに示すように、指定したアクティビティが開始されます。提供しなかった場合は、デフォルトのシステム インテントが開きます。指定したアクティビティは、ユーザーが再生を一時停止または停止できるように再生コントロールを提供する必要があります。

Kotlin

val pi: PendingIntent = Intent(context, MyActivity::class.java).let { intent ->
    PendingIntent.getActivity(
        context, 99 /*request code*/,
        intent,
        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
    )
}
session.setSessionActivity(pi)

Java

Intent intent = new Intent(context, MyActivity.class);
PendingIntent pi = PendingIntent.getActivity(context, 99 /*request code*/,
        intent, PendingIntent.FLAG_UPDATE_CURRENT);
session.setSessionActivity(pi);

承認済みのユースケース

[この曲なに?] カードは、アプリを離れたときに音声がバックグラウンドで再生され続けることをユーザーが期待している場合にのみ使用する必要があります。アプリがピクチャー イン ピクチャーを統合して準拠している場合を除き、動画の再生やゲームの音声は常に一時停止する必要があります。