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

TV アプリは、ランチャーの背後またはバックグラウンドでメディアを再生する際に、「この曲なに?」カードを表示する必要があります。このカードを使用すると、現在メディアを再生しているアプリに戻ることができます。

アクティブな MediaSession がある場合、Android フレームワークはホーム画面に「この曲なに?」カードを表示します。カードには、アルバムアート、タイトル、アプリアイコンなどのメディアのメタデータが含まれます。ユーザーがカードを選択すると、アプリが開きます。

MediaSession クラスを使用して「この曲なに?」カードを実装できます。

図 1. バックグラウンドでメディアを再生しているときに [この曲なに?] カードを表示する。

「この曲なに?」カード

メディア セッションを実装し、セッションをアクティブにして音声フォーカスをリクエストすると、「この曲なに?」カードが表示されます。

注: 「この曲なに?」カードは、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
    )
}
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);