27 Mart 2025'ten itibaren AOSP'yi derlemek ve AOSP'ye katkıda bulunmak için aosp-main
yerine android-latest-release
kullanmanızı öneririz. Daha fazla bilgi için AOSP'de yapılan değişiklikler başlıklı makaleyi inceleyin.
AppCard ana makinesini yapılandırma
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Uygulama kartlarını gösteren uygulamalarla iletişim kurmak için AppCardHost
simgesini kullanın.
İzinler
AppCardHost
kullanan tüm uygulamalar aşağıdaki izinlere sahip olmalıdır:
android.permission.INTERACT_ACROSS_USERS_FULL
android.permission.QUERY_ALL_PACKAGES
- (Yalnızca API düzeyi 34 ve sonraki sürümlerde)
android.car.permission.BIND_APP_CARD_PROVIDER
Başlat
Ana makineyi başlatmak için şunları sağlayın:
- Bağlam
updateRate
Milisaniye cinsinden AppCard güncelleme hızı.
fastUpdateRate
EnforceFastUpdateRate
ile etiketlenen bileşenler için milisaniye cinsinden güncelleme hızı
responseExecutor
AppCard uygulamalarından yanıt almak istediğiniz ileti dizisi.
Tasarım
AppCardHost
ile iki şekilde etkileşim kurulabilir:
VEYA,
AppCardListener
AppCardListener
bileşeni, AppCardHost
ve AppCard uygulamalarından iletişim güncellemeleri almak için kendisini bir AppCardHost
'a kaydeder.
AppCardListener
arayüz işlevleri burada ayrıntılı olarak açıklanmıştır.
fun onAppCardReceived(AppCardContainer)
Bu işlev, bir uygulamadan AppCard alındığında tetiklenir. AppCard'ı gönderen uygulamayı tanımlamak için bir AppCard ve appIdentifier
sağlayan bir AppCardContainer
olarak gönderilir.
fun onComponentReceived(AppCardComponentContainer)
Bu işlev, bir uygulamadan AppCard bileşeni alındığında tetiklenir. AppCard'ı gönderen uygulamayı tanımlamak için bir AppCards bileşeni, Identifier
ve bileşenin ilişkili olduğu AppCard'ı işaretlemek için bir dize kimliği sağlayan bir AppCardComponentContainer
olarak gönderilir.
fun onProviderRemoved(String, String?)
Bu işlev, bir AppCard sağlayıcısı kaldırıldığında veya devre dışı bırakıldığında tetiklenir. Belirtilen paket adı ve sağlayıcı yetkilisiyle ilgili etkin AppCard'ları temizlemek için bu yöntemi kullanın.
Yetki {@code null}
ise paketin tamamı kaldırılmıştır.
fun onProviderAdded(String, String?)
Bu işlev, bir AppCard sağlayıcı eklendiğinde veya etkinleştirildiğinde tetiklenir.
Örnek kullanım. Bir uygulama kartı seçicideki tüm uygulama kartlarını yenilemek için bu işlevi tetikleyici olarak kullanın. Yetki {@code null}
ise paketin tamamı eklenmiştir.
fun onPackageCommunicationError(appIdentifier, Throwable)
Bu işlev, AppCardHost
bir AppCard sağlayıcısıyla iletişim kurarken hatayla karşılaştığında tetiklenir.
Örnek kullanım. Kullanıcıya, seçtiği bir uygulama kartında hata olduğunu göstermek için bu yöntemi kullanın.
API'ler
fun refreshCompatibleapp()
Bu yöntem, ana makineyi kullanan etkinlik devam ettirildiğinde çağrılmalıdır. Böylece ana makine, uygulama kartlarını destekleyen uygulama listesini yenileyebilir.
fun destroy()
Toplantı sahibi kullanan bir etkinlik yok edildiğinde bu yöntemi çağırarak toplantı sahibinin tüm bağlantıları ve dahili üyeleri temizlemesini sağlayın.
fun registerListener(AppCardListener)
AppCardListener
kaydetmek için kullanılır.
fun unregisterListener(AppCardListener)
AppCardListener
kaydını iptal etmek için kullanılır.
fun getAllAppCards(AppCardContext)
Kayıtlı bir AppCardListener
'ye sistemde sağlanan tüm uygulama kartlarını sağlamak için bu yöntemi çağırın. Bu yöntem, sağlayıcılara uygulama kartlarını nasıl yapılandıracakları konusunda ipuçları sağlayan belirli bir AppCardContext
ile birlikte kullanılır.
fun requestAppCard(AppCardContext, appIdentifier, String)
Kayıtlı bir AppCardListener
'ye belirli bir AppCard sağlamak için bu yöntemi çağırın. Bu yöntemde, sağlayıcılara AppCard'larını nasıl yapılandıracakları konusunda ipuçları veren bir AppCardContext
sağlanır.
fun notifyAppCardRemoved(appIdentifier, String)
Uygulama kartı sağlayıcıyı, uygulama kartının artık etkin olmadığını bildirme.
fun notifyAppCardInteraction(appIdentifier, String, String, String)
Bir uygulama kartı sağlayıcıyı, uygulama kartıyla etkileşim kurulduğunu bildirme.
Yalnızca düğme tıklaması desteklenir ve bu AppCardMessageConstants.InteractionMessageConstants.MSG_INTERACTION_ON_CLICK
ile gösterilir.
Bir uygulama kartı için appIdentifier
, uygulama kartı kimliği, bileşen kimliği ve etkileşim kimliğiyle bu işlevi çağıran bir onClick
dinleyici içeren bir düğme oluşturmanızı öneririz.
fun sendAppCardContextUpdate(AppCardContext, appIdentifier, String)
Belirli bir uygulama kartı için AppCardContext
güncellemesi gönderin. Örneğin, Park modundan Sürüş moduna geçerken her etkin AppCard için isInteractable
değerinin false
olarak ayarlandığı bir AppCardContext
güncellemesi göndermek üzere bu yöntemi kullanın.
SSS
Örnek uygulamaları nerede bulabilirim?
Örnek ana makine. Test özellikleriyle birlikte sistemdeki tüm uygulama kartlarını gösterir.
DriverUI ve Pano yöneticisi. Pano yöneticisi seçici, DriverUI ise sunucu görevi görür.
Her AppCardContentProvider
kaç tane uygulama kartı destekleyebilir?
AppCardContentProvider
, sınırsız sayıda uygulama kartı destekleyebilir.
Ancak uygulama kartlarının sayısını, performansın düşmesiyle olumlu kullanıcı deneyimi arasında dengeye getirin.
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-06-26 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-06-26 UTC."],[],[],null,["# Configure an AppCard host\n\nUse `AppCardHost` to communicate with apps that show AppCards.\n\nPermissions\n-----------\n\nAny app that uses an `AppCardHost` must have the following permissions:\n\n- `android.permission.INTERACT_ACROSS_USERS_FULL`\n- `android.permission.QUERY_ALL_PACKAGES`\n- (In API level 34 and higher **only** ) `android.car.permission.BIND_APP_CARD_PROVIDER`\n\nInitialize\n----------\n\nTo initialize the host, provide:\n\n- Context\n- `updateRate` AppCard update rate in milliseconds.\n- `fastUpdateRate` Update rate in milliseconds for components tagged with `EnforceFastUpdateRate`\n- `responseExecutor` A thread on which you want to receive responses from AppCard apps.\n\nDesign\n------\n\nAn `AppCardHost` can be interacted with in one of two ways:\n\n- Register as an [`AppCardListener`](#appcardlistener)\n\nOR,\n\n- Interact with the [`AppCardHost` APIs](#api)\n\n### AppCardListener\n\nThe `AppCardListener` component registers itself with an `AppCardHost`\nto receive communication updates from the `AppCardHost` and AppCard apps.\nThe interface functions of an `AppCardListener` are detailed here.\n\n\u003cbr /\u003e\n\n`fun onAppCardReceived(AppCardContainer)`\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nThis function is triggered when an AppCard has been received from an app. It's sent as an `AppCardContainer` which provides an AppCard and an `appIdentifier` to identify the app that sent the AppCard\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun onComponentReceived(AppCardComponentContainer)`\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nThis function is triggered when an AppCard component is received from an app. It's sent as an `AppCardComponentContainer`, which provides an AppCards component, `Identifier` to identify the app that sent the AppCard, and a string ID to point to the AppCard to which the component is related.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun onProviderRemoved(String, String?)`\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nThis function is triggered when an AppCard provider has been removed or disabled. Use this method to clean up any active AppCard related to the given package name and provider authority.\u003cbr /\u003e\n\nIf authority is `{@code null}`, then an entire package was removed.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun onProviderAdded(String, String?)`\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nThis function is triggered when an AppCard provider has been added or enabled.\u003cbr /\u003e\n\n**Sample usage.** Use this function as a trigger to refresh all available\nAppCards in an AppCard picker. If authority is `{@code null}`, then an entire\npackage was added.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun onPackageCommunicationError(appIdentifier, Throwable)`\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nThis function is triggered when the `AppCardHost` encounters an error when communicating with an AppCard provider.\n\n\u003cbr /\u003e\n\n**Sample usage.** Use this method to show to the user that an AppCard they have\nselected has encountered an error.\n\n\u003cbr /\u003e\n\n### APIs\n\n\u003cbr /\u003e\n\n`fun refreshCompatibleapp()`\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nThis method should be called whenever the activity that is using the host is resumed so that the host can refresh its list of apps that support AppCards.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun destroy()`\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nCall this method when an activity that is using a host is destroyed so that the host can clean up all connections and internal members.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun registerListener(AppCardListener)`\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nUsed to register an `AppCardListener`.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun unregisterListener(AppCardListener)`\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nUsed to unregister an `AppCardListener`.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun getAllAppCards(AppCardContext)`\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nCall this method to supply a registered `AppCardListener` with all the AppCards provided in the system with a given `AppCardContext` that provides hints to the providers on how to structure their AppCard.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun requestAppCard(AppCardContext, appIdentifier, String)`\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nCall this method to supply a registered `AppCardListener` with a specific AppCard, given an `AppCardContext` that gives hints to the providers on how to structure their AppCard.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun notifyAppCardRemoved(appIdentifier, String)`\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nNotify an AppCard provider that its AppCard is no longer active.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun notifyAppCardInteraction(appIdentifier, String, String, String)`\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nNotify an AppCard provider that its AppCard has been interacted with. The only supported interaction is a button click, which is signified by a `AppCardMessageConstants.InteractionMessageConstants.MSG_INTERACTION_ON_CLICK`.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nWe recommend creating a button for an AppCard with an `onClick` listener that calls this function with `appIdentifier`, AppCard ID, component ID, and interaction ID.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n`fun sendAppCardContextUpdate(AppCardContext, appIdentifier, String)`\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nSend an `AppCardContext` update for a specific AppCard. For example, when shifting from Park mode to Drive mode, use this method to send an `AppCardContext` update in which `isInteractable` is set to `false` for each active AppCard.\n\n\u003cbr /\u003e\n\nFAQ\n---\n\n1. Where can I find sample implementations?\n\n - [Sample host](https://android.googlesource.com/platform/packages/apps/Car/libs/+/refs/tags/ub-automotive-master-20250418/car-app-card-host-lib/sample-host/). Shows all available AppCards in the system, along with\n testing capabilities.\n\n - DriverUI and [Pano manager](https://cs.android.com/android/platform/superproject/+/android-latest-release:packages/services/Car/car_product/distant_display/apps/CarDistantDisplayPanoManager/;l=1?q=CarDistantDisplayPanoManager&sq=&ss=android%2Fplatform%2Fsuperproject%2Fmain). Pano manager acts as the picker while\n DriverUI acts as the presenter.\n\n2. How many AppCards can each `AppCardContentProvider` support?\n\n An `AppCardContentProvider` can support an infinite number of AppCards.\n However, be sure to balance the number of AppCards with degraded performance\n versus a positive user experience."]]