Ab dem 27. März 2025 empfehlen wir, android-latest-release
anstelle von aosp-main
zu verwenden, um AOSP zu erstellen und Beiträge dazu zu leisten. Weitere Informationen finden Sie unter Änderungen am AOSP.
AppCard-Host konfigurieren
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Verwenden Sie AppCardHost
, um mit Apps zu kommunizieren, die App-Infokarten anzeigen.
Berechtigungen
Alle Apps, die eine AppCardHost
verwenden, müssen die folgenden Berechtigungen haben:
android.permission.INTERACT_ACROSS_USERS_FULL
android.permission.QUERY_ALL_PACKAGES
- (Nur bei API-Level 34 und höher)
android.car.permission.BIND_APP_CARD_PROVIDER
Initialisieren
Geben Sie Folgendes an, um den Host zu initialisieren:
- Kontext
updateRate
Aktualisierungsrate der App-Karte in Millisekunden.
fastUpdateRate
Aktualisierungsrate in Millisekunden für mit EnforceFastUpdateRate
getaggte Komponenten
responseExecutor
Einen Thread, in dem Sie Antworten von AppCard-Apps erhalten möchten.
Design
Mit einem AppCardHost
können Sie auf zwei Arten interagieren:
ODER,
AppCardListener
Die AppCardListener
-Komponente registriert sich bei einem AppCardHost
, um Kommunikationsupdates von den Apps AppCardHost
und AppCard zu erhalten.
Die Schnittstellenfunktionen eines AppCardListener
werden hier beschrieben.
fun onAppCardReceived(AppCardContainer)
Diese Funktion wird ausgelöst, wenn eine App-Infokarte von einer App empfangen wurde. Sie wird als AppCardContainer
gesendet, die eine App-Infokarte und eine appIdentifier
enthält, um die App zu identifizieren, die die App-Infokarte gesendet hat.
fun onComponentReceived(AppCardComponentContainer)
Diese Funktion wird ausgelöst, wenn eine AppCard-Komponente von einer App empfangen wird. Sie wird als AppCardComponentContainer
gesendet, die eine AppCard-Komponente, Identifier
zur Identifizierung der App, die die AppCard gesendet hat, und eine String-ID enthält, die auf die AppCard verweist, mit der die Komponente verknüpft ist.
fun onProviderRemoved(String, String?)
Diese Funktion wird ausgelöst, wenn ein App-Kartenanbieter entfernt oder deaktiviert wurde. Mit dieser Methode können Sie alle aktiven App-Karten im Zusammenhang mit dem angegebenen Paketnamen und der Anbieterautorität bereinigen.
Wenn „authority“ {@code null}
ist, wurde ein ganzes Paket entfernt.
fun onProviderAdded(String, String?)
Diese Funktion wird ausgelöst, wenn ein AppCard-Anbieter hinzugefügt oder aktiviert wurde.
Verwendungsbeispiel Verwenden Sie diese Funktion als Trigger, um alle verfügbaren App-Karten in einer App-Kartenauswahl zu aktualisieren. Wenn „authority“ {@code null}
ist, wurde ein ganzes Paket hinzugefügt.
fun onPackageCommunicationError(appIdentifier, Throwable)
Diese Funktion wird ausgelöst, wenn bei der Kommunikation mit einem AppCard-Anbieter ein Fehler auftritt.AppCardHost
Verwendungsbeispiel Mit dieser Methode können Sie dem Nutzer mitteilen, dass bei einer ausgewählten App-Karte ein Fehler aufgetreten ist.
APIs
fun refreshCompatibleapp()
Diese Methode sollte immer dann aufgerufen werden, wenn die Aktivität, die den Host verwendet, fortgesetzt wird, damit der Host die Liste der Apps aktualisieren kann, die App-Infokarten unterstützen.
fun destroy()
Diese Methode wird aufgerufen, wenn eine Aktivität, die einen Host verwendet, zerstört wird, damit der Host alle Verbindungen und internen Mitglieder bereinigen kann.
fun registerListener(AppCardListener)
Wird zum Registrieren eines AppCardListener
verwendet.
fun unregisterListener(AppCardListener)
Wird verwendet, um die Registrierung eines AppCardListener
aufzuheben.
fun getAllAppCards(AppCardContext)
Rufen Sie diese Methode auf, um einer registrierten AppCardListener
alle im System verfügbaren App-Karten mit einer bestimmten AppCardContext
zur Verfügung zu stellen, die den Anbietern Hinweise zur Strukturierung ihrer App-Karte gibt.
fun requestAppCard(AppCardContext, appIdentifier, String)
Rufen Sie diese Methode auf, um einem registrierten AppCardListener
eine bestimmte App-Karte mit einer AppCardContext
zur Verfügung zu stellen, die den Anbietern Hinweise zur Strukturierung ihrer App-Karte gibt.
fun notifyAppCardRemoved(appIdentifier, String)
Einen AppCard-Anbieter darüber informieren, dass seine AppCard nicht mehr aktiv ist
fun notifyAppCardInteraction(appIdentifier, String, String, String)
Einen AppCard-Anbieter benachrichtigen, dass mit seiner AppCard interagiert wurde.
Die einzige unterstützte Interaktion ist ein Klick auf eine Schaltfläche, der durch ein AppCardMessageConstants.InteractionMessageConstants.MSG_INTERACTION_ON_CLICK
gekennzeichnet ist.
Wir empfehlen, für eine App-Karte eine Schaltfläche mit einem onClick
-Listener zu erstellen, der diese Funktion mit appIdentifier
, der App-Karten-ID, der Komponenten-ID und der Interaktions-ID aufruft.
fun sendAppCardContextUpdate(AppCardContext, appIdentifier, String)
Senden Sie ein AppCardContext
-Update für eine bestimmte App-Karte. Wenn Sie beispielsweise vom Parkmodus in den Fahrmodus wechseln, verwenden Sie diese Methode, um ein AppCardContext
-Update zu senden, bei dem isInteractable
für jede aktive App-Karte auf false
festgelegt ist.
Häufig gestellte Fragen
Wo finde ich Beispielimplementierungen?
Beispielhost Hier werden alle im System verfügbaren App-Infokarten sowie Testfunktionen angezeigt.
DriverUI und Pano Manager Der Pano Manager fungiert als Auswähler, während DriverUI als Präsentator dient.
Wie viele App-Karten kann jede AppCardContentProvider
unterstützen?
Ein AppCardContentProvider
kann eine unbegrenzte Anzahl von App-Karten unterstützen.
Achten Sie jedoch darauf, die Anzahl der App-Infokarten so zu wählen, dass die Leistung nicht beeinträchtigt wird und die Nutzerfreundlichkeit nicht leidet.
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-06-26 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 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."]]