Начиная с 27 марта 2025 г. мы рекомендуем использовать android-latest-release
вместо aosp-main
для создания и участия в AOSP. Дополнительные сведения см. в разделе Изменения в AOSP .
Создать карту приложения
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Чтобы создать AppCard, приложение должно создать провайдера в манифесте, который расширяет AppCardContentProvider
. AppCardContentProvider
абстрагирует базовые детали для упрощения создания AppCards.
Манифестная декларация
Чтобы создать 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"
ИЛИ,
@string/host_permission
существует в библиотеке AppCard и определяет разрешение в зависимости от версии API Android системы.
Использование строкового ресурса работает только при сборке с помощью Gradle. При использовании Soong укажите явную строку со значением строкового ресурса в соответствии с соответствующим квалификатором ресурса.
( по умолчанию ) android:grantUriPermissions="false"
( по умолчанию ) android:forceUriPermissions="false"
Чтобы избежать непредвиденных результатов, поставщику необходимо определить только один орган власти в android:authorities
.
Объявите фильтр намерений на основе действий, com.android.car.appcard.APP_CARD_PROVIDER
Расширить AppCardContentProvider
В этом разделе описываются переопределенные и защищенные окончательные методы.
Переопределение методов
val authority: String
Используйте этот метод для возврата полномочий, определенных в свойстве манифеста android:authorities
. fun onCreate(): Boolean
Этот метод должен вызывать super.onCreate()
. Используйте этот метод для настройки функциональности, которая может потенциально вызвать задержку, если настроена при запросе AppCard. val appCardIds: List
Используйте этот метод для возврата списка поддерживаемых идентификаторов AppCard. Мы рекомендуем сделать каждый идентификатор подробным, так как эта строка используется для регистрации ошибок. fun onAppCardAdded(String, AppCardContext): AppCard
Этот метод вызывается, когда AppCard отображается в первый раз, и предоставляет идентификатор, связанный с AppCard, и AppCardContext
, которые содержат подсказки о том, как отображается AppCard. Используйте этот метод для настройки любой функциональности, требуемой AppCards, поддерживаемыми в качестве поставщика. После вызова этой функции AppCard, соответствующий данному идентификатору, считается активным.
fun onAppCardRemoved(String)
Этот метод вызывается, когда пользователю не показываются оставшиеся экземпляры AppCard, и обрабатывает всю очистку. Когда вызывается эта функция, AppCard, соответствующий данному идентификатору, считается неактивным. fun onAppCardContextChanged(String, AppCardContext)
Этот метод вызывается, когда система хочет обновить способ отображения AppCard и отправляет обновленный AppCardContext
. Защищенные конечные методы
fun sendAppCardUpdate(AppCard)
Вызовите этот метод, чтобы поставить в очередь обновление для активной AppCard. fun sendAppCardComponentUpdate(String, Component)
Вызовите этот метод, чтобы поставить в очередь обновление для компонента в активной AppCard. Если данный компонент помечен тегом EnforceFastUpdateRate
, то обновление отправляется немедленно. Часто задаваемые вопросы
Где примеры реализации?
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-06-12 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2025-06-12 UTC."],[],[],null,["# Create an AppCard\n\nTo 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--------------------\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-----------------------------\n\nThis section describes **override** and **protected** final methods.\n\n### Override 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\n### Protected 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---\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/)"]]