AppCard ホストを構成する

AppCardHost を使用して、アプリカードを表示するアプリと通信します。

権限

AppCardHost を使用するアプリには、次の権限が必要です。

  • android.permission.INTERACT_ACROSS_USERS_FULL
  • android.permission.QUERY_ALL_PACKAGES
  • (API レベル 34 以降のみandroid.car.permission.BIND_APP_CARD_PROVIDER

初期化

ホストを初期化するには、次の情報が必要です。

  • コンテキスト
  • updateRate AppCard の更新頻度(ミリ秒単位)。
  • fastUpdateRate EnforceFastUpdateRate というタグが付けられたコンポーネントの更新レート(ミリ秒単位)
  • responseExecutor AppCard アプリからレスポンスを受信するスレッド。

デザイン

AppCardHost を操作する方法は 2 つあります。

または

AppCardListener

AppCardListener コンポーネントは AppCardHost に自身を登録し、AppCardHost アプリと AppCard アプリから通信の最新情報を受け取ります。AppCardListener のインターフェース関数の詳細については、こちらをご覧ください。

fun onAppCardReceived(AppCardContainer)

この関数は、アプリから AppCard を受信したときにトリガーされます。AppCard と AppCard を送信したアプリを識別する appIdentifier を指定する AppCardContainer として送信されます。

fun onComponentReceived(AppCardComponentContainer)

この関数は、アプリから AppCard コンポーネントが受信されたときにトリガーされます。AppCardComponentContainer として送信され、AppCard コンポーネント、AppCard を送信したアプリを識別する Identifier、コンポーネントが関連付けられている AppCard を指す文字列 ID を提供します。

fun onProviderRemoved(String, String?)

この関数は、AppCard プロバイダが削除または無効にされたときにトリガーされます。このメソッドは、指定されたパッケージ名とプロバイダの権限に関連するアクティブな AppCard をクリーンアップするために使用します。

authority が {@code null} の場合、パッケージ全体が削除されています。

fun onProviderAdded(String, String?)

この関数は、AppCard プロバイダが追加または有効にされたときにトリガーされます。

使用例: この関数は、AppCard 選択ツールで利用可能なすべての AppCard を更新するトリガーとして使用します。authority が {@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 と、AppCard の構造化方法に関するヒントを提供する特定の AppCardContext を指定します。

fun requestAppCard(AppCardContext, appIdentifier, String)

このメソッドを呼び出して、登録済みの AppCardListener に特定の AppCard を指定します。このとき、AppCard の構造に関するヒントをプロバイダに提供する AppCardContext を指定します。

fun notifyAppCardRemoved(appIdentifier, String)

AppCard が有効でなくなったことを AppCard プロバイダに通知する。

fun notifyAppCardInteraction(appIdentifier, String, String, String)

AppCard が操作されたことを AppCard プロバイダに通知します。サポートされている操作はボタンのクリックのみで、AppCardMessageConstants.InteractionMessageConstants.MSG_INTERACTION_ON_CLICK で表されます。

appIdentifier、AppCard ID、コンポーネント ID、インタラクション ID を指定してこの関数を呼び出す onClick リスナーを使用して、AppCard のボタンを作成することをおすすめします。

fun sendAppCardContextUpdate(AppCardContext, appIdentifier, String)

特定の AppCard の AppCardContext の更新を送信します。たとえば、パーキング モードからドライブ モードにシフトする場合は、このメソッドを使用して、アクティブな AppCard ごとに isInteractablefalse に設定された AppCardContext アップデートを送信します。

よくある質問

  1. 実装例はどこで確認できますか?

    • サンプルホスト。システムで利用可能なすべての AppCard とテスト機能が表示されます。

    • DriverUI と Pano Manager。Pano マネージャーは選択ツールとして機能し、DriverUI はプレゼンターとして機能します。

  2. AppCardContentProvider がサポートできる AppCard の数

    AppCardContentProvider は、無数の AppCard をサポートできます。ただし、AppCard の数は、パフォーマンスの低下とユーザー エクスペリエンスの向上のバランスを考慮して設定してください。