建立 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"
            android:enabled="true">
            <intent-filter>
                <action android:name="com.android.car.appcard.APP_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定義單一授權。

  • 宣告以動作為依據的意圖篩選器: com.android.car.appcard.APP_CARD_PROVIDER

擴充 AppCardContentProvider

本節說明 overrideprotected 最終方法。

覆寫方法

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,系統會立即傳送更新。

常見問題

範例實作位置