Mulai 27 Maret 2025, sebaiknya gunakan android-latest-release
, bukan aosp-main
, untuk mem-build dan berkontribusi pada AOSP. Untuk mengetahui informasi selengkapnya, lihat Perubahan pada AOSP.
Membuat AppCard
Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Untuk membuat AppCard, aplikasi harus membuat penyedia dalam manifes yang memperluas
AppCardContentProvider
. AppCardContentProvider
mengabstraksi detail
yang mendasarinya untuk memfasilitasi pembuatan Kartu Aplikasi.
Pernyataan manifes
Untuk membuat AppCard, aplikasi harus membuat penyedia dalam manifes untuk memperluas
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>
Hanya satu penyedia yang dapat ditentukan per paket dan dengan properti ini:
android:exported="true"
android:enabled="true"
android:permission="@string/host_permission"
ATAU,
@string/host_permission
ada di library AppCard dan menentukan izin bergantung pada versi Android API sistem.
Penggunaan resource string hanya berfungsi saat membuat build dengan Gradle. Saat menggunakan
Soong, tentukan string eksplisit dengan nilai resource string sesuai
dengan penentu resource yang sesuai.
(default) android:grantUriPermissions="false"
(default) android:forceUriPermissions="false"
Untuk menghindari hasil yang tidak terduga, penyedia harus menentukan hanya satu otoritas di android:authorities
.
Mendeklarasikan filter intent berbasis tindakan,
com.android.car.appcard.APP_CARD_PROVIDER
Memperluas AppCardContentProvider
Bagian ini menjelaskan metode akhir penggantian dan terlindungi.
Mengganti metode
val authority: String
Gunakan metode ini untuk menampilkan otoritas yang ditentukan dalam
properti manifes android:authorities
.
fun onCreate(): Boolean
Metode ini harus memanggil super.onCreate()
. Gunakan metode ini untuk menyiapkan fungsi yang berpotensi menyebabkan penundaan jika disiapkan saat AppCard diminta.
val appCardIds: List
Gunakan metode ini untuk menampilkan daftar ID AppCard yang didukung. Sebaiknya buat setiap ID menjadi verbose karena string ini digunakan untuk mencatat error.
fun onAppCardAdded(String, AppCardContext): AppCard
Metode ini dipanggil saat AppCard ditampilkan untuk pertama kalinya dan
memberikan ID yang terkait dengan AppCard dan AppCardContext
yang memberikan
petunjuk tentang cara AppCard ditampilkan.
Gunakan metode ini untuk menyiapkan fungsi apa pun yang diperlukan oleh AppCards yang didukung sebagai penyedia. Setelah fungsi ini dipanggil, AppCard yang
sesuai dengan ID yang diberikan dianggap aktif.
fun onAppCardRemoved(String)
Metode ini dipanggil saat tidak ada lagi instance AppCard yang ditampilkan kepada pengguna dan menangani semua pembersihan. Saat fungsi ini dipanggil, AppCard
yang sesuai dengan ID yang diberikan dianggap tidak aktif.
fun onAppCardContextChanged(String, AppCardContext)
Metode ini dipanggil saat sistem ingin memperbarui cara AppCard
ditampilkan dan mengirimkan AppCardContext
yang diperbarui.
Metode akhir yang dilindungi
fun sendAppCardUpdate(AppCard)
Panggil metode ini untuk mengantrekan update untuk AppCard yang aktif.
fun sendAppCardComponentUpdate(String, Component)
Panggil metode ini untuk mengantrekan update untuk komponen di AppCard yang aktif. Jika komponen tertentu diberi tag dengan EnforceFastUpdateRate
, maka
update akan segera dikirim.
FAQ
Di mana contoh implementasinya?
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-09-05 UTC.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Informasi yang saya butuhkan tidak ada","missingTheInformationINeed","thumb-down"],["Terlalu rumit/langkahnya terlalu banyak","tooComplicatedTooManySteps","thumb-down"],["Sudah usang","outOfDate","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Masalah kode / contoh","samplesCodeIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 2025-09-05 UTC."],[],[],null,["To create an AppCard, an app must create a provider in the manifest that extends\n`AppCardContentProvider`. The `AppCardContentProvider` abstracts away underlying\ndetails to facilitate the creation of AppCards.\n\nManifest declaration\n\nTo create an AppCard, an app must create a provider in the manifest to extend\n`AppCardContentProvider`. \n\n \u003cprovider android:name=\".SimpleAppCardContentProvider\"\n android:authorities=\"com.example.appcard.sample.media\"\n android:permission=\"@string/host_permission\"\n android:exported=\"true\"\n android:enabled=\"true\"\u003e\n \u003cintent-filter\u003e\n \u003caction android:name=\"com.android.car.appcard.APP_CARD_PROVIDER\" /\u003e\n \u003c/intent-filter\u003e\n \u003c/provider\u003e\n\n**Only one provider can be defined per package** and with these properties:\n\n- `android:exported=\"true\"`\n- `android:enabled=\"true\"`\n- `android:permission=\"@string/host_permission\"`\n\n OR,\n - `android:readPermission=\"@string/host_permission\"`\n\n AND,\n\n `android:writePermission=\"@string/host_permission\"`\n- `@string/host_permission` exists in the AppCard library and defines a\n permission depending on the Android API version of the system.\n\n Using the string resource works only when building with Gradle. When using\n Soong, specify the explicit string with the string resource value according\n to the appropriate resource qualifier.\n- (*default* ) `android:grantUriPermissions=\"false\"`\n\n- (*default* ) `android:forceUriPermissions=\"false\"`\n\n To avoid unexpected results, it's required that the provider define a single\n authority **only** in `android:authorities`.\n- Declare an action-based intent filter,\n `com.android.car.appcard.APP_CARD_PROVIDER`\n\nExtend AppCardContentProvider\n\nThis section describes **override** and **protected** final methods.\n\nOverride methods\n\n\u003cbr /\u003e\n\n`val authority: String` Use this method to return the authority defined in the `android:authorities` manifest property.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun onCreate(): Boolean` This method must call `super.onCreate()`. Use this method to set up functionality that could potentially cause a delay if set up when an AppCard is requested.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`val appCardIds: List` Use this method to return the list of supported AppCard IDs. We recommend making each ID verbose since this string is used to log errors.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun onAppCardAdded(String, AppCardContext): AppCard` This method is called when an AppCard is shown for the first time and provides the ID related to the AppCard and the `AppCardContext` that provide hints as to how the AppCard is displayed.\n\n\u003cbr /\u003e\n\nUse this method to set up any functionality required by the AppCards\nsupported as a provider. Once this function is called, the AppCard that\ncorresponds to the given ID is considered to be **active.**\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun onAppCardRemoved(String)` This method is called when no remaining instances of the AppCard are shown to the user and handles all clean up. When this function is called, the AppCard that corresponds to the given ID is considered **inactive.**\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun onAppCardContextChanged(String, AppCardContext)` This method is called when the system wants to update how an AppCard is displayed and sends an updated `AppCardContext`.\n\n\u003cbr /\u003e\n\nProtected final methods\n\n\u003cbr /\u003e\n\n`fun sendAppCardUpdate(AppCard)` Invoke this method to queue an update for an active AppCard.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun sendAppCardComponentUpdate(String, Component)` Invoke this method to queue an update for a component in an active AppCard. If the given component is tagged with `EnforceFastUpdateRate`, then the update is sent immediately.\n\n\u003cbr /\u003e\n\nFAQ\n\nWhere are the sample implementations?\n\n- [Calendar AppCard](https://android.googlesource.com/platform/packages/apps/Car/libs/+/refs/tags/ub-automotive-master-20250418/car-app-card-lib/sample-calendar-app/)\n- [Media AppCard](https://android.googlesource.com/platform/packages/apps/Car/libs/+/refs/tags/ub-automotive-master-20250418/car-app-card-lib/sample-media-app/)\n- [Weather AppCard](https://android.googlesource.com/platform/packages/apps/Car/libs/+/refs/tags/ub-automotive-master-20250418/car-app-card-lib/sample-weather-app/)"]]