使用 AppCardHost 与显示 AppCard 的应用进行通信。
权限
任何使用 AppCardHost 的应用都必须具有以下权限:
android.permission.INTERACT_ACROSS_USERS_FULLandroid.permission.QUERY_ALL_PACKAGES- (仅在 API 级别 34 及更高级别中)
android.car.permission.BIND_APP_CARD_PROVIDER
初始化
如需初始化主机,请提供以下信息:
- 背景信息
updateRateAppCard 更新速率(以毫秒为单位)。fastUpdateRate标记为EnforceFastUpdateRate的组件的更新速率(以毫秒为单位)responseExecutor您希望从 AppCard 应用接收响应的线程。
设计
您可以通过以下两种方式之一与 AppCardHost 进行交互:
- 注册为
AppCardListener
或
- 与
AppCardHostAPI 进行互动
AppCardListener
AppCardListener 组件会向 AppCardHost 注册自己,以接收来自 AppCardHost 和 AppCard 应用的通信更新。此处详细介绍了 AppCardListener 的接口函数。
fun onAppCardReceived(AppCardContainer)AppCardContainer 发送,其中包含 AppCard 和 appIdentifier,用于标识发送 AppCard 的应用fun onComponentReceived(AppCardComponentContainer)AppCardComponentContainer 发送,其中包含一个 AppCard 组件 Identifier,用于识别发送 AppCard 的应用,以及一个字符串 ID,用于指向与该组件相关联的 AppCard。fun onProviderRemoved(String, String?)如果 authority 为 {@code null},则表示移除了整个软件包。
fun onProviderAdded(String, String?)用法示例。您可以将此函数用作触发器,以刷新 AppCard 选择器中的所有可用 AppCard。如果 authority 为 {@code null},则表示添加了整个软件包。
fun onPackageCommunicationError(appIdentifier, Throwable)AppCardHost 在与 AppCard 提供程序通信时遇到错误时,系统会触发此函数。
用法示例。使用此方法可向用户显示其所选的 AppCard 遇到了错误。
API
fun refreshCompatibleapp()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)fun notifyAppCardInteraction(appIdentifier, String, String, String)AppCardMessageConstants.InteractionMessageConstants.MSG_INTERACTION_ON_CLICK 表示。onClick 监听器的按钮,该监听器使用 appIdentifier、AppCard ID、组件 ID 和互动 ID 调用此函数。fun sendAppCardContextUpdate(AppCardContext, appIdentifier, String)AppCardContext 更新。例如,从停车模式切换到驾驶模式时,请使用此方法发送 AppCardContext 更新,其中每个有效的 AppCard 的 isInteractable 都设置为 false。常见问题解答
在哪里可以找到示例实现?
主机示例。显示系统中所有可用的 AppCard 以及测试功能。
DriverUI 和 Pano Manager。Pano 管理器充当选择器,而 DriverUI 充当呈现程序。
每个
AppCardContentProvider可以支持多少个 AppCard?AppCardContentProvider可以支持无限数量的 AppCard。不过,请务必在 AppCard 数量、性能下降和良好用户体验之间取得平衡。