A partir de 27 de março de 2025, recomendamos usar android-latest-release
em vez de aosp-main
para criar e contribuir com o AOSP. Para mais informações, consulte Mudanças no AOSP.
Criar um card de app
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Para criar um AppCard, um app precisa criar um provedor no manifesto que estenda
AppCardContentProvider
. O AppCardContentProvider
abstrai os detalhes
subjacentes para facilitar a criação de AppCards.
Declaração do manifesto
Para criar um AppCard, um app precisa criar um provedor no manifesto para estender
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>
Só é possível definir um provedor por pacote e com estas propriedades:
android:exported="true"
android:enabled="true"
android:permission="@string/host_permission"
OU
@string/host_permission
existe na biblioteca AppCard e define uma
permissão dependendo da versão da API Android do sistema.
Usar o recurso de string só funciona ao criar com o Gradle. Ao usar
Soong, especifique a string explícita com o valor do recurso de string de acordo
com o qualificador de recurso apropriado.
(padrão) android:grantUriPermissions="false"
(padrão) android:forceUriPermissions="false"
Para evitar resultados inesperados, é necessário que o provedor defina uma única
autoridade apenas em android:authorities
.
Declare um filtro de intent baseado em ação,
com.android.car.appcard.APP_CARD_PROVIDER
Estender AppCardContentProvider
Esta seção descreve os métodos finais override e protected.
Modificar métodos
val authority: String
Use esse método para retornar a autoridade definida na
propriedade android:authorities
do manifesto.
fun onCreate(): Boolean
Esse método precisa chamar super.onCreate()
. Use esse
método para configurar funcionalidades que podem causar um atraso se forem definidas
quando um AppCard é solicitado.
val appCardIds: List
Use esse método para retornar a lista de IDs de AppCard compatíveis. Recomendamos que cada ID seja detalhado, já que essa string é usada para registrar erros.
fun onAppCardAdded(String, AppCardContext): AppCard
Esse método é chamado quando um AppCard é mostrado pela primeira vez e
fornece o ID relacionado ao AppCard e o AppCardContext
que fornece
dicas sobre como o AppCard é exibido.
Use esse método para configurar qualquer funcionalidade exigida pelos AppCards
compatíveis como um provedor. Depois que essa função é chamada, o AppCard que
corresponde ao ID fornecido é considerado ativo.
fun onAppCardRemoved(String)
Esse método é chamado quando nenhuma outra instância do AppCard é mostrada
ao usuário e processa toda a limpeza. Quando essa função é chamada, o AppCard
que corresponde ao ID fornecido é considerado inativo.
fun onAppCardContextChanged(String, AppCardContext)
Esse método é chamado quando o sistema quer atualizar a forma como um AppCard é
mostrado e envia um AppCardContext
atualizado.
Métodos finais protegidos
fun sendAppCardUpdate(AppCard)
Invoque esse método para enfileirar uma atualização de um AppCard ativo.
fun sendAppCardComponentUpdate(String, Component)
Invoque esse método para enfileirar uma atualização de um componente em um
AppCard ativo. Se o componente especificado estiver marcado com EnforceFastUpdateRate
, a atualização será enviada imediatamente.
Perguntas frequentes
Onde estão os exemplos de implementação?
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-09-05 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 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/)"]]