通知は、アプリが使用されていないときに、アプリ内のイベントに関する簡潔かつタイムリーな情報をドライバーに提供します。通知は、通知センターに表示することも、ディスプレイ上にヘッドアップ通知として表示することもできます。Android Automotive OS 用の通知を作成するには、他のデバイスの場合と同様、NotificationBuilder API を使用します。ただし、ドライバーの安全を確保し、できる限りドライバーの気を散らさないようにするため、API の一部のメソッドやクラスは、制限されていたり、異なる動作になっていたりする場合があります。
車内通知の特徴
ドライバーが運転に集中できる安全な環境を提供するために、Android Automotive OS の通知は他のデバイスの通知と次の点が異なっています。
- シンプルなユーザー操作
- 運転状態に基づく UX の制限
シンプルなユーザー操作
ドライバーが運転に集中できるようにするために、車内通知には以下の特長を備えたシンプルなユーザー操作モデルが採用されています。
- 複雑な制御の排除
- 通知では、タップによる通知の展開、通知の長押しによる追加オプションの表示、スワイプの長さに基づく制御の使用といった複雑な操作を行うことができません。
- 通知音
- ヘッドアップ通知をトリガーする場合に限り、通知音が鳴ります。
- Android Automotive OS は、すべての車載対応メッセージ通知機能に対して、再生ボタンとミュートボタンを自動的に追加します。 - 再生: ユーザーのデフォルト デジタル アシスタント(Google アシスタントなど)または自動車のデフォルト テキスト読み上げシステムを使用して、ドライバーに対して通知を読み上げます。
- ミュート: これから運転している間は、対象の会話内に新しいメッセージがあっても、ヘッドアップ通知を表示しないようにします。ミュートにしている会話のメッセージ通知は、通知センターに表示されます。また、ドライバーは、通知センターから会話のミュートを解除することもできます。 
 
- シンプルな通知表示オプション
- RemoteViewsおよびカスタム コンテンツ ビューはサポートされていません。また、以下の通知スタイルもサポートされていません。- BigPictureStyle
- BigTextStyle
- InboxStyle
- ProgressStyle
 - アプリがこれらの通知スタイルのいずれかを使用して 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は、起動時にユーザー インターフェースを一切表示しないことを示します。
- Actionには 1 つの- RemoteInputが含まれています。
 
- セマンティック アクションは 
通知センター
ほぼすべての通知は、ヘッドアップ通知としてトリガーされた場合でも、通知センターに表示されます。通知は、運転している間は通知センター内に残ります。
ドライバーは通知センター内の通知を操作できます。 ドライバーは、次のいずれか、または両方の方法で通知センターにアクセスできます(自動車メーカーによって異なります)。
- 画面を上から下にスワイプする(他のデバイスの通知ドロワーと同様)。
- システム インターフェースのボタンをタップする。
通知のグループ化
互いに関連する通知は、他のデバイスの通知ドロワーと同様に、通知センター内で自動的にグループ化されます。ドライバーが通知センター内でグループのサマリーをタップした場合、PendingIntent が起動するのではなく、グループが展開され、そのグループ内の通知がすべて表示されます。
通知センターに表示されない通知
次の通知は通知センターに表示されません。
- Media playback通知。継続的なメディア再生に関する情報は、Android Automotive OS によって収集され、ユーザー インターフェース内の専用の場所に表示されます。通知がメディア再生として認識されるには、null 以外のトークンを指定して- setMediaSessionを呼び出す必要があります。
- CATEGORY_NAVIGATIONのターンバイターン方式ナビ通知。
- システム特権が付与されているアプリや、IMPORTANCE_DEFAULTよりも重要度が低いプラットフォーム キーで署名されているアプリのフォアグラウンド サービス通知。
ヘッドアップ通知
ヘッドアップ通知は画面上部に通知カードとして表示されます。 ヘッドアップ通知はドライバーの注意を引くため、トリガーするのは、運転上重要な情報で、時間的制約があり、実用的な場合に限るようにしてください。ヘッドアップ通知をトリガーできるのは特定のカテゴリの通知に限られます。
自動車メーカーは、通知センターが開いているときにヘッドアップ通知の表示を許可するかどうかを決定できます。
アプリによるヘッドアップ通知のトリガー方法
ヘッドアップ通知のトリガー要件は、アプリがシステム特権を持っているかどうかによって異なります。
- システム特権が付与されているアプリおよびプラットフォーム キーで署名されているアプリ
- 通知チャンネルの重要度を IMPORTANCE_HIGH以上に設定することによって、ヘッドアップ通知をトリガーできます。
- その他のすべてのアプリ
- 通知チャンネルの重要度を - IMPORTANCE_HIGH以上に設定し、通知が次のいずれかのカテゴリに属していることを確認することで、ヘッドアップ通知をトリガーできます。
ヘッドアップ通知の有効期間
アプリがヘッドアップ通知をトリガーすると、その直後に通知が車の画面に表示されます。ドライバーが操作を行わないと、以下の場合を除き、8 秒後にヘッドアップ通知が自動的に非表示になります。
- 特定の着信に対するヘッドアップ通知は非表示にできません。ヘッドアップ通知は、ドライバーが電話を受けるまで、または通話が終了するまで表示され続けます。非表示にできない着信用ヘッドアップ通知は、次の要件を満たしている必要があります。 - CATEGORY_CALLに属している
- 全画面表示インテントを設定している
- setOngoing()メソッドによって継続的通知としてマーキングされている
 
- アプリが 8 秒の期間内に通知を更新すると、ヘッドアップ通知は表示状態を継続します。 
非表示になったヘッドアップ通知は、CATEGORY_NAVIGATION 通知の場合を除き、通知センター内でリスト表示されます。
自動車向け Notification API の変更点と制限事項
このセクションでは、Android Automotive OS 上で Notification API を使用した場合に、動作が変更されるクラスや制限があるクラスについて、その変更内容の概要を示します。
Notification.Builder
表 1 と表 2 に、Notification.Builder クラスにおける API の変更点と制限事項を示します。
表 1. Notification.Builder のパブリック メソッドの変更点
| パブリック メソッド | 効果 | 説明 | ||
|---|---|---|---|---|
| 
 | 条件付き no-op | Notification.MessagingStyle通知には、互換性要件で指定されているアクションを追加する必要があります。他のアクションを追加しても、通知ボタンとして表示されることはありません。 | ||
| 
 
 
 
 
 
 
 | no-op | RemoteViewsおよびカスタム コンテンツ ビューはサポートされていません。 | ||
| 
 
 | no-op | 通知バッジはサポートされていません。 | ||
| 
 
 | no-op | カウントダウン タイマーはサポートされていません。 | ||
| setColorized() | 制約の変更 | プラットフォームで署名されたアプリ: 設定可能(デフォルトで可能)。 システム特権が付与されたアプリ: プラットフォームによって設定されます(デフォルトでは設定不可)。 その他すべてのアプリ: プラットフォームによって設定されます(デフォルトでは設定不可)。 | ||
| setFullScreenIntent() | 動作の変更 | インテントを自動で開始しません。 | ||
| setLargeIcon() | 動作の変更 | 通知の右側に大きいアイコンが表示されます。 | ||
| setLights() | no-op | Android Automotive OS デバイスには LED インジケーター ライトがありません。 | ||
| setOngoing() | 動作の変更 | 通知がヘッドアップ通知もトリガーしている場合は動作が異なります。 
 | no-op | プライベート モードはサポートされていません。 | 
| setSettingsText() | no-op | 通知は、アプリ設定にリンクする機能をサポートしていません。 代わりに、ドライバーはアプリ経由でアプリ設定にアクセスします。 | ||
| setTicker() | no-op | ティッカー テキストはサポートされていません。 | 
表 2: Notification.Builder のネストクラスの変更点
| ネストクラス | 効果 | 説明 | 
|---|---|---|
| 
 
 
 | 不使用 | 要約文のみが表示されます。これらのスタイルの詳細な通知はサポートされていません。 | 
| Notification.BubbleMetadata | 不使用 | ふきだしはサポートされていません。 | 
| Notification.MediaStyle | 非表示 | このスタイルの通知は非表示になります。Android Automotive OS は、メディアの通知および再生に関するユーザー インターフェースの操作を管理します。 | 
| Notification.MessagingStyle | 動作の変更 | このスタイルの通知は、以下の点が異なります。 
 | 
| 
 
 | 不使用 | エクステンダーはサポートされていません。 | 
Notification.Action.Builder
表 3 は、Notification.Action.Builder クラスにおける API の変更点と制限事項を示しています。
表 3. Notification.Action.Builder のパブリック メソッドの変更点
| パブリック メソッド | 効果 | 説明 | 
|---|---|---|
| public コンストラクタ | 動作の変更 | public コンストラクタで指定されたアイコンは無視されます。 | 
| addRemoteInput | 動作の変更 | できる限りドライバーの気を散らさないようにするため、ユーザーの代わりにデジタル アシスタント(Google アシスタントなど)がメッセージに対するレスポンスを挿入します。ユーザーはメッセージを入力できません。 | 
| setAllowGeneratedReplies | no-op | スマート リプライはサポートされていません。 | 
