設定 AppCard 主機

使用 AppCardHost 與顯示應用程式資訊卡的應用程式進行通訊。

權限

任何使用 AppCardHost 的應用程式都必須具備下列權限:

  • android.permission.INTERACT_ACROSS_USERS_FULL
  • android.permission.QUERY_ALL_PACKAGES
  • (僅適用於 API 級別 34 以上) android.car.permission.BIND_APP_CARD_PROVIDER

初始化

如要初始化主機,請提供:

  • 背景資訊
  • updateRate 以毫秒為單位的應用程式資訊卡更新率。
  • fastUpdateRate 標記為 EnforceFastUpdateRate 的元件更新率 (以毫秒為單位)
  • responseExecutor 您要接收 AppCard 應用程式回應的執行緒。

設計

AppCardHost 可透過以下兩種方式進行互動:

OR

AppCardListener

AppCardListener 元件會將自身註冊為 AppCardHost,以便接收來自 AppCardHost 和 AppCard 應用程式的通訊更新。以下是 AppCardListener 的介面函式詳細說明。

fun onAppCardReceived(AppCardContainer)

當應用程式收到 AppCard 時,這個函式就會觸發。它會以 AppCardContainer 的形式傳送,提供 AppCard 和 appIdentifier,用於識別傳送 AppCard 的應用程式

fun onComponentReceived(AppCardComponentContainer)

當應用程式收到 AppCard 元件時,這個函式就會觸發。它會以 AppCardComponentContainer 的形式傳送,該函式會提供 AppCard 元件、Identifier (用於識別傳送 AppCard 的應用程式),以及字串 ID (用於指向元件相關聯的 AppCard)。

fun onProviderRemoved(String, String?)

當 AppCard 供應器已遭移除或停用時,系統會觸發這個函式。使用這個方法清除與指定套件名稱和供應者授權相關的任何有效 AppCard。

如果權限為 {@code null},則整個套件都已移除。

fun onProviderAdded(String, String?)

新增或啟用 AppCard 供應器時,系統會觸發這個函式。

用法示範。使用這個函式做為觸發事件,即可在 AppCard 挑選器中重新整理所有可用的 AppCard。如果權限為 {@code null},則表示已新增整個套件。

fun onPackageCommunicationError(appIdentifier, Throwable)

AppCardHost 與 AppCard 供應器通訊時發生錯誤,就會觸發這個函式。

用法示範。使用這個方法,向使用者顯示他們所選的 AppCard 發生錯誤。

API

fun refreshCompatibleapp()

只要使用主機的活動恢復時,就應呼叫此方法,以便主機重新整理支援 AppCard 的應用程式清單。

fun destroy()

在使用主機的活動遭到銷毀時呼叫此方法,以便主機清理所有連線和內部成員。

fun registerListener(AppCardListener)

用於註冊 AppCardListener

fun unregisterListener(AppCardListener)

用於取消註冊 AppCardListener

fun getAllAppCards(AppCardContext)

呼叫這個方法,即可為已註冊的 AppCardListener 提供系統中提供的所有 AppCard,並使用特定 AppCardContext 向供應器提供有關如何建構 AppCard 的提示。

fun requestAppCard(AppCardContext, appIdentifier, String)

呼叫這個方法,即可為註冊的 AppCardListener 提供特定 AppCard,前提是您提供 AppCardContext,讓提供者瞭解如何建構 AppCard。

fun notifyAppCardRemoved(appIdentifier, String)

通知 AppCard 供應商其 AppCard 已失效。

fun notifyAppCardInteraction(appIdentifier, String, String, String)

通知 AppCard 供應商,指出 AppCard 已與使用者互動。唯一支援的互動是按下按鈕,以 AppCardMessageConstants.InteractionMessageConstants.MSG_INTERACTION_ON_CLICK 表示。

建議您為 AppCard 建立按鈕,並使用 onClick 事件監聽器,以 appIdentifier、AppCard ID、元件 ID 和互動 ID 呼叫此函式。

fun sendAppCardContextUpdate(AppCardContext, appIdentifier, String)

針對特定 AppCard 傳送 AppCardContext 更新。舉例來說,當您從停車模式切換至行車模式時,請使用這個方法傳送 AppCardContext 更新,其中 isInteractable 會針對每個有效的 AppCard 設為 false

常見問題

  1. 哪裡可以找到實作範例?

    • 範例主機。顯示系統中所有可用的 AppCard 和測試功能。

    • DriverUI 和 Pano Manager。Pano 管理員會做為挑選器,而 DriverUI 會做為呈現工具。

  2. 每個 AppCardContentProvider 可支援多少個 AppCard?

    AppCardContentProvider 可支援無限數量的 AppCard。不過,請務必在 AppCard 數量、效能降低和良好使用者體驗之間取得平衡。