Android Automotive OS 通知

通知功能可在應用程式處於閒置狀態時,為駕駛人提供簡短且即時的應用程式事件相關資訊。通知可以顯示在通知中心,部分通知也可以顯示在螢幕上做為抬頭通知。如要為 Android Automotive OS 建立通知,請使用為其他裝置建立通知時採用的相同 NotificationBuilder API。不過,為了確保駕駛人的安全並盡量減少干擾,部分 API 方法和類別會受到限制,行為也會不同。

車輛專用通知功能的差異

為了建立免受干擾的安全行車環境,Android Automotive OS 的通知與其他裝置上的通知具有以下差異:

  • 簡化的使用者互動程序
  • 根據行駛狀態限制使用者體驗

簡化的使用者互動程序

為確保駕駛人能專心注意路況,車輛專用通知具備簡化的使用者互動模型,特色如下:

沒有複雜的控制項
通知不允許使用複雜的控制項,例如輕觸來展開通知、長按通知以使用其他選項,或是使用基於滑動長度手勢的控制項。
通知音效
通知只會在觸發抬頭通知時播放音效。
訊息通知專用的自動播放按鈕和靜音按鈕

Android Automotive OS 會自動在所有與汽車相容的訊息通知中,加入「播放」按鈕和「靜音」按鈕。

  • 播放:運用使用者的預設數位助理 (例如 Google 助理) 或車輛的預設文字轉語音系統,為駕駛人讀出通知。
  • 靜音:在剩餘的行駛時間內,禁止抬頭通知顯示對話中的任何後續訊息。來自設為靜音的對話的訊息通知仍會顯示在通知中心,而駕駛人也可以透過通知中心將對話取消靜音。

簡化的通知顯示選項

系統不支援 RemoteViews 和自訂內容檢視畫面。此外,系統也不支援下列通知樣式:

  • BigPictureStyle
  • BigTextStyle
  • InboxStyle

如果應用程式使用上述其中一種通知樣式將通知傳送至 Android Automotive OS,則只會顯示摘要文字。

簡化的通知管道管理方式

為減少 Automotive 裝置上大量繁複的管理工作,Android Automotive OS 不支援通知管道和相關的 UI 功能提示。

根據行駛狀態限制使用者體驗

Android Automotive OS 提供使用者體驗限制引擎。汽車製造商可利用這個引擎,根據車輛的行車狀態透過下列方式限制通知:

  • 依據特定字元長度截斷通知字串
  • 隱藏 CATEGORY_MESSAGE 通知的訊息摘要
  • 限制通知中心可顯示的通知數量

支援的資源類型

根據預設,Android Automotive OS 僅支援部分可用於在其他裝置上接收通知的資源類型,其中包括下列資源類型:

  • 可繪項目
  • 圖示
  • 圖片

訊息通知的相容性需求

為了提供一致且最少干擾的使用者體驗,Android Automotive OS 的訊息通知設有特殊需求。

訊息通知必須符合下列需求,才能視為與汽車相容:

通知中心

即使有些通知同時會以抬頭通知的形式觸發,幾乎所有通知仍會顯示在通知中心。在行車期間,通知會保留在通知中心。

駕駛人可在通知中心與通知互動。 視汽車製造商而定,駕駛人可透過下列一或兩種方式存取通知中心:

  • 從螢幕頂端向下滑動,類似於其他裝置的通知導覽匣。
  • 輕觸系統介面中的按鈕。

已分組的通知

通知中心內的相關通知會自動分組歸類,就像在其他裝置的通知匣中一樣。不過,當駕駛人在通知中心輕觸特定群組的摘要時,系統不會啟動 PendingIntent,而是展開群組來顯示該群組的全部通知。

通知中心沒有顯示的通知

通知中心不會顯示下列通知:

  • Media playback 通知。播放中媒體的相關資訊會由 Android Automotive OS 收集,並會顯示在使用者介面的專屬位置。請注意,必須使用非空值權杖呼叫 setMediaSession,系統才會將通知視為媒體播放。
  • CATEGORY_NAVIGATION 專用的即時路線導航通知。
  • 前景服務通知,適用於具備系統特殊權限的應用程式,以及使用重要性等級低於 IMPORTANCE_DEFAULT 的平台金鑰簽署的應用程式。

抬頭通知

抬頭通知會以通知資訊卡的形式顯示在螢幕頂端。由於抬頭通知會引起駕駛人注意,因此應用程式應該只在資訊對行駛至關重要、具時效性,且可做為行動的依據時,才觸發抬頭通知。只有特定類別的通知能夠觸發抬頭通知。

汽車製造商可決定是否允許在通知中心開啟時顯示抬頭通知。

應用程式如何觸發抬頭通知

視應用程式是否擁有系統特殊權限而定,觸發抬頭通知的需求條件各有不同。

具有系統特殊權限的應用程式,以及使用平台金鑰簽署的應用程式
應用程式可將通知管道重要性設為 IMPORTANCE_HIGH 以上等級,藉此觸發抬頭通知。
所有其他應用程式

應用程式可將通知管道重要性設為 IMPORTANCE_HIGH 以上等級,並確保通知屬於下列其中一個類別,藉此觸發抬頭通知:

抬頭通知的運作流程

應用程式觸發抬頭通知後,通知會立即顯示在車輛的螢幕上。如果駕駛人未採取任何行動,抬頭通知會在八秒後自動關閉,但下列情況除外:

  • 某些來電的抬頭通知無法關閉,且抬頭通知會持續顯示,直到駕駛人接聽來電或通話終止。通知必須符合下列條件,系統才會認定為不可關閉的來電專用抬頭通知:

  • 如果應用程式在八秒的時間範圍內更新通知,系統就會持續顯示抬頭通知。

CATEGORY_NAVIGATION 通知外,抬頭通知關閉後,皆會顯示在通知中心內。

車輛專用的通知 API 異動和限制

本節將彙整各個類別的差異,這些類別在通知 API 的行為表現上有所不同,或是針對 Android Automotive OS 設有限制。

Notification.Builder

表 1 和表 2 說明 Notification.Builder 類別中的 API 異動和限制。

表 1. Notification.Builder 的公用方法異動

公用方法 效果 說明

addAction()

條件式免人工管理 Notification.MessagingStyle 通知必須新增相容性需求中指定的動作。系統不會將任何其他新增的動作轉譯為通知按鈕。

createBigContentView()

createContentView()

createHeadsUpContentView()

setContent()

setCustomBigContentView()

setCustomContentView()

setCustomHeadsUpContentView()

免人工管理 不支援 RemoteViews 和自訂內容檢視畫面。

setBadgeIconType()

setNumber()

免人工管理 不支援通知標記。

setChronometerCountDown()

setUsesChronometer()

免人工管理 不支援倒數計時器。
setColorized() 限制條件已變更

平台簽署的應用程式:可設定;預設為允許。

具有系統特殊權限的應用程式:由平台設定;預設為不允許。

所有其他應用程式:由平台設定;預設為不允許。

setFullScreenIntent() 行為已變更 不會自動啟動意圖。
setLargeIcon() 行為已變更 大型圖示會顯示在通知的右側。
setLights() 免人工管理 Android Automotive OS 裝置沒有 LED 指示燈。
setOngoing() 行為已變更

如果通知也觸發抬頭通知,則行為會有所不同。

只有在抬頭通知是針對來電的情況下,setOngoing() 才能將其設為不可關閉。不可關閉的來電抬頭通知必須符合setPublicVersion()

setVisibility()

免人工管理 不支援私人模式。
setSettingsText() 免人工管理 通知不支援連結至應用程式設定的預設用途,而是由駕駛人透過應用程式存取應用程式設定。
setTicker() 免人工管理 不支援資訊列文字。

表 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 的公用方法異動

公用方法 效果 說明
公用建構函式 行為已變更 系統會忽略公用建構函式中指定的圖示。
addRemoteInput 行為已變更 為了將駕駛人分心等級降到最低,數位助理 (例如 Google 助理) 會替使用者在訊息中插入回應,使用者則無法輸入訊息。
setAllowGeneratedReplies 免人工管理 不支援智慧回覆。