Android Automotive OS の通知

通知は、アプリが使用されていないときに、アプリ内のイベントに関する簡潔かつタイムリーな情報をドライバーに提供します。通知は、通知センターに表示することも、ディスプレイ上にヘッドアップ通知として表示することもできます。Android Automotive OS 用の通知を作成するには、他のデバイスの場合と同様、NotificationBuilder API を使用します。ただし、ドライバーの安全を確保し、できる限りドライバーの気を散らさないようにするため、API の一部のメソッドやクラスは、制限されていたり、異なる動作になっていたりする場合があります。

車内通知の特徴

ドライバーが運転に集中できる安全な環境を提供するために、Android Automotive OS の通知は他のデバイスの通知と次の点が異なっています。

  • シンプルなユーザー操作
  • 運転状態に基づく UX の制限

シンプルなユーザー操作

ドライバーが運転に集中できるようにするために、車内通知には以下の特長を備えたシンプルなユーザー操作モデルが採用されています。

複雑な制御の排除

通知では、タップによる通知の展開、通知の長押しによる追加オプションの表示、スワイプの長さに基づく制御の使用といった複雑な操作を行うことができません。

通知音

ヘッドアップ通知をトリガーする場合に限り、通知音が鳴ります。

メッセージ通知用の再生ボタンとミュートボタンの自動追加

Android Automotive OS は、すべての車載対応メッセージ通知機能に対して、再生ボタンとミュートボタンを自動的に追加します。

  • 再生: ユーザーのデフォルト デジタル アシスタント(Google アシスタントなど)または自動車のデフォルト テキスト読み上げシステムを使用して、ドライバーに対して通知を読み上げます。
  • ミュート: これから運転している間は、対象の会話内に新しいメッセージがあっても、ヘッドアップ通知を表示しないようにします。ミュートにしている会話のメッセージ通知は、通知センターに表示されます。また、ドライバーは、通知センターから会話のミュートを解除することもできます。

シンプルな通知表示オプション

RemoteViews およびカスタム コンテンツ ビューはサポートされていません。また、以下の通知スタイルもサポートされていません。

  • BigPictureStyle
  • BigTextStyle
  • InboxStyle

アプリがこれらの通知スタイルのいずれかを使用して Android Automotive OS に通知を送信した場合、要約文のみが表示されます。

シンプルな通知チャンネル管理

Android Automotive OS は、Automotive デバイスにおけるリッチな管理タスクの使用を抑えるために、通知チャンネルとそれに関連する UI アフォーダンスをサポートしていません。

運転状態に基づく UX の制限

Android Automotive OS には UX 制限エンジンが搭載されています。自動車メーカーはこのエンジンを使用することで、次の方法で車の運転状態に基づいて通知を制限できます。

  • 特定の文字数で通知の文字列を切り捨てる
  • CATEGORY_MESSAGE 通知のメッセージ サマリーを非表示にする
  • 通知センターに表示できる通知の数を制限する

サポートされるリソースタイプ

Android Automotive OS のデフォルトでは、他のデバイスでの通知に使用できるリソースタイプの一部のみがサポートされます。たとえば、次のリソースタイプなどです。

  • ドローアブル
  • アイコン
  • 画像

メッセージ通知機能の互換性要件

一貫性があり邪魔にならないユーザー エクスペリエンスを提供するため、Android Automotive OS 上でメッセージ通知機能を実現するには、特別な要件を満たす必要があります。

メッセージ通知機能は、以下の要件を満たす場合に「車載対応」と見なされます。

  • CATEGORY_MESSAGE カテゴリに属している。
  • Notification.MessagingStyle スタイルを使用している。
  • 未読メッセージだけを格納している。
  • 次の要件を満たす既読マーキング Action を備えている。

    • セマンティック アクションは Action.SEMANTIC_ACTION_MARK_AS_READ に設定する必要があります。
    • Action の起動時にユーザー インターフェースを表示しないことを指示する必要があります。
  • 通知が返信 Action を備えている場合、その Action が次の要件を満たしている。

    • セマンティック アクションは Action.SEMANTIC_ACTION_REPLY に設定する必要があります。
    • Action の起動時にユーザー インターフェースを表示しないことを指示する必要があります。
    • ActionRemoteInput を 1 つ含める必要があります。

通知センター

ほぼすべての通知は、ヘッドアップ通知としてトリガーされた場合でも、通知センターに表示されます。通知は、運転している間は通知センター内に残ります。

ドライバーは通知センター内の通知を操作できます。 ドライバーは、次のいずれか、または両方の方法で通知センターにアクセスできます(自動車メーカーによって異なります)。

  • 画面を上から下にスワイプする(他のデバイスの通知ドロワーと同様)
  • システム インターフェースのボタンをタップする

通知のグループ化

互いに関連する通知は、他のデバイスの通知ドロワーと同様に、通知センター内で自動的にグループ化されます。ドライバーが通知センター内でグループのサマリーをタップした場合、PendingIntent が起動するのではなく、グループが展開され、そのグループ内の通知がすべて表示されます。

通知センターに表示されない通知

次の通知は通知センターに表示されません。

  • CATEGORY_TRANSPORT のメディア再生通知。継続的なメディア再生に関する情報は、Android Automotive OS によって収集され、ユーザー インターフェース内の専用の場所に表示されます。
  • CATEGORY_NAVIGATION のターンバイターン方式ナビ通知。
  • システム特権が付与されているアプリや、IMPORTANCE_DEFAULT よりも重要度が低いプラットフォーム キーで署名されているアプリのフォアグラウンド サービス通知。

ヘッドアップ通知

ヘッドアップ通知は画面上部に通知カードとして表示されます。 ヘッドアップ通知はドライバーの注意を引くため、トリガーするのは、運転上重要な情報で、時間的制約があり、実用的な場合に限るようにしてください。ヘッドアップ通知をトリガーできるのは特定のカテゴリの通知に限られます。

自動車メーカーは、通知センターが開いているときにヘッドアップ通知の表示を許可するかどうかを決定できます。

アプリによるヘッドアップ通知のトリガー方法

ヘッドアップ通知のトリガー要件は、アプリがシステム特権を持っているかどうかによって異なります。

システム特権が付与されているアプリおよびプラットフォーム キーで署名されているアプリ
通知チャンネルの重要度を IMPORTANCE_HIGH 以上に設定することによって、ヘッドアップ通知をトリガーできます。
他のすべてのアプリ

ヘッドアップ通知をトリガーするには、通知チャンネルの重要度を IMPORTANCE_HIGH 以上に設定し、通知が属するカテゴリを次のいずれかにします。

ヘッドアップ通知の有効期間

アプリがヘッドアップ通知をトリガーすると、その直後に通知が車の画面に表示されます。ドライバーが操作を行わないと、以下の場合を除き、8 秒(自動車メーカーが設定可能)後にヘッドアップ通知が自動的に非表示になります。

  • 特定の着信に対するヘッドアップ通知は非表示にできません。ヘッドアップ通知は、ドライバーが電話を受けるまで、または通話が終了するまで表示され続けます。非表示にできない着信用ヘッドアップ通知は、次の要件を満たしている必要があります。

  • アプリが 8 秒の期間内に通知を更新すると、ヘッドアップ通知は表示状態を継続します。

非表示になったヘッドアップ通知は、CATEGORY_NAVIGATION 通知の場合を除き、通知センター内でリスト表示されます。

自動車向け Notification API の変更点と制限事項

このセクションでは、Android Automotive OS 上で Notification API を使用した場合に、動作が変更されるクラスや制限があるクラスについて、その変更内容の概要を示します。

Notification.Builder

Notification.Builder クラスにおける API の変更点と制限事項について、次の表に示します。

表 1. Notification.Builder のパブリック メソッドの変更点

パブリック メソッド 効果 説明

addAction()

条件付き no-op Notification.MessagingStyle 通知には、互換性要件で指定されているアクションを追加する必要があります。他のアクションを追加しても、通知ボタンとして表示されることはありません。

createBigContentView()

createContentView()

createHeadsUpContentView()

setContent()

setCustomBigContentView()

setCustomContentView()

setCustomHeadsUpContentView()

no-op RemoteViews およびカスタム コンテンツ ビューはサポートされていません。

setBadgeIconType()

setNumber()

no-op 通知バッジはサポートされていません。

setChronometerCountDown()

setUsesChronometer()

no-op カウントダウン タイマーはサポートされていません。
setColorized() 制約の変更

プラットフォームで署名されたアプリ: 設定可能(デフォルトで可能)。

システム特権が付与されたアプリ: プラットフォームによって設定されます(デフォルトでは設定不可)。

その他すべてのアプリ: プラットフォームによって設定されます(デフォルトでは設定不可)。

setFullScreenIntent() 動作の変更 インテントを自動で開始しません。
setLargeIcon() 動作の変更 通知の右側に大きいアイコンが表示されます。
setLights() no-op Android Automotive OS デバイスには LED インジケーター ライトがありません。
setOngoing() 動作の変更

通知がヘッドアップ通知もトリガーしている場合は動作が異なります。

着信に対するヘッドアップ通知の場合にのみ、ヘッドアップ通知を非表示にできないようにします。非表示にできない着信用ヘッドアップ通知は、次の要件を満たしている必要があります。

ドライバーは、他のすべてのタイプのヘッドアップ通知を非表示にできます。

setPublicVersion()

setVisibility()

no-op プライベート モードはサポートされていません。
setSettingsText() no-op 通知は、アプリ設定にリンクする機能をサポートしていません。 代わりに、ドライバーはアプリ経由でアプリ設定にアクセスします。
setTicker() no-op ティッカー テキストはサポートされていません。

表 2: Notification.Builder のネストクラスの変更点

ネストクラス 効果 説明

Notification.BigPictureStyle

Notification.BigTextStyle

Notification.InboxStyle

不使用 要約文のみが表示されます。これらのスタイルの詳細な通知はサポートされていません。
Notification.BubbleMetadata 不使用 ふきだしはサポートされていません。
Notification.MediaStyle 非表示 このスタイルの通知は非表示になります。Android Automotive OS は、メディアの通知および再生に関するユーザー インターフェースの操作を管理します。
Notification.MessagingStyle 動作の変更

このスタイルの通知は、以下の点が異なります。

  • addMessage() を使用している場合、通知は、会話内の最後のメッセージだけを表示します。互換性要件で指定されているように、未読メッセージだけを格納する必要があります。
  • Android Automotive OS は、車載対応メッセージ通知機能に対して、再生ボタンとミュートボタンを自動的に追加します。
  • 通知には、互換性要件で指定されているアクションを追加する必要があります。他のアクションを追加しても、通知ボタンとして表示されることはありません。

Notification.CarExtender

Notification.WearableExtender

不使用 エクステンダーはサポートされていません。

Notification.Action.Builder

Notification.Action.Builder クラスにおける API の変更点と制限事項について、次の表に示します。

表 3. Notification.Action.Builder のパブリック メソッドの変更点

パブリック メソッド 効果 説明
public コンストラクタ 動作の変更 public コンストラクタで指定されたアイコンは無視されます。
addRemoteInput 動作の変更 できる限りドライバーの気を散らさないようにするため、ユーザーの代わりにデジタル アシスタント(Google アシスタントなど)がメッセージに対するレスポンスを挿入します。ユーザーがメッセージを入力することはできません。
setAllowGeneratedReplies no-op スマート リプライはサポートされていません。