创建 AppCard

若要创建 AppCard,应用必须在清单中创建一个扩展 AppCardContentProvider 的提供程序。AppCardContentProvider 会抽象化底层细节,以方便创建 AppCard。

清单声明

如需创建 AppCard,应用必须在清单中创建一个提供程序来扩展 AppCardContentProvider

<provider android:name=".SimpleAppCardContentProvider"
            android:authorities="com.example.appcard.sample.media"
            android:permission="@string/host_permission"
            android:exported="true&>quot;
       <     android:>enabled="tru<e"
            intent-filter
                action android:>name="co<m.android.car.>a<ppcard.AP>P_CARD_PROVIDER" /
            /intent-filter
/provider

每个软件包只能定义一个提供程序,并且具有以下属性:

  • android:exported="true"
  • android:enabled="true"
  • android:permission="@string/host_permission"

    或者,

    • android:readPermission="@string/host_permission"

      以及

      android:writePermission="@string/host_permission"

  • @string/host_permission 存在于 AppCard 库中,并定义了取决于系统 Android API 版本的权限。

    仅当使用 Gradle 进行构建时,使用字符串资源才有效。使用 Soong 时,请根据相应的资源限定符指定具有字符串资源值的显式字符串。

  • 默认android:grantUriPermissions="false"

  • 默认android:forceUriPermissions="false"

    为避免出现意外结果,提供方必须在 android:authorities定义一个授权。

  • 声明基于操作的 intent 过滤器,com.android.car.appcard.APP_CARD_PROVIDER

扩展 AppCardContentProvider

本部分介绍了 overrideprotected final 方法。

替换方法

val authority: String
使用此方法可返回在 android:authorities 清单属性中定义的授权。

fun onCreate(): Boolean
此方法必须调用 super.onCreate()。使用此方法设置在请求 AppCard 时可能会导致延迟的功能。

val appCardIds: List
使用此方法可返回受支持的 AppCard ID 列表。建议您让每个 ID 都详细一些,因为此字符串用于记录错误。

fun onAppCardAdded(String, AppCardContext): AppCard
首次显示 AppCard 时会调用此方法,并提供与 AppCard 相关的 ID 和 AppCardContext,以提示 AppCard 的显示方式。

使用此方法设置作为提供方支持的 AppCards 所需的任何功能。调用此函数后,与指定 ID 对应的 AppCard 会被视为处于活跃状态

fun onAppCardRemoved(String)
当没有剩余的 AppCard 实例向用户显示时,系统会调用此方法,并处理所有清理工作。调用此函数时,与指定 ID 对应的 AppCard 会被视为处于非活动状态

fun onAppCardContextChanged(String, AppCardContext)
当系统想要更新 AppCard 的显示方式并发送更新后的 AppCardContext 时,会调用此方法。

受保护的最终方法

fun sendAppCardUpdate(AppCard)
调用此方法可将有效 AppCard 的更新加入队列。

fun sendAppCardComponentUpdate(String, Component)
调用此方法可将活跃 AppCard 中组件的更新加入队列。如果给定的组件带有 EnforceFastUpdateRate 标记,则立即发送更新。

常见问题解答

示例实现在哪里?