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 は、通知チャンネルと関連する UI アフォーダンスをサポートしていないため、Automotive デバイスでリッチな管理タスクが発生する頻度を減らします。

運転状態に基づく 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 秒後に自動的に閉じます。ただし、次の場合を除きます。

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

  • アプリが 8 秒の期間内に通知を更新した場合、ヘッドアップ通知は継続します。

ヘッドアップ通知が閉じられると、CATEGORY_NAVIGATION 通知でない限り、通知は通知センターに一覧表示されます。

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

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

Notification.Builder

表 1 と表 2 に、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() 動作の変更

通知によってヘッドアップ通知もトリガーされる場合、動作が異なります。

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 動作の変更

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

Notification.CarExtender

Notification.WearableExtender

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

Notification.Action.Builder

表 3 に、Notification.Action.Builder クラスの API の変更点と制限事項を示します。

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

パブリック メソッド 効果 説明
public コンストラクタ 動作の変更 public コンストラクタで指定されたアイコンは無視されます。
addRemoteInput 動作の変更 ドライバーの注意散漫を最小限に抑えるため、Google アシスタントなどのデジタル アシスタントは、ユーザーへのメッセージへの応答を挿入します。ユーザーはメッセージを入力できません。
setAllowGeneratedReplies no-op スマート リプライはサポートされていません。