Use AppCardHost
para se comunicar com apps que mostram cards de apps.
Permissões
Qualquer app que use uma AppCardHost
precisa ter as seguintes permissões:
android.permission.INTERACT_ACROSS_USERS_FULL
android.permission.QUERY_ALL_PACKAGES
- Somente no nível 34 da API e versões mais recentes
android.car.permission.BIND_APP_CARD_PROVIDER
Initialize
Para inicializar o host, forneça:
- Contexto
updateRate
Taxa de atualização do card do app em milissegundos.fastUpdateRate
Taxa de atualização em milissegundos para componentes marcados comEnforceFastUpdateRate
responseExecutor
Uma conversa em que você quer receber respostas de apps do AppCard.
Design
É possível interagir com um AppCardHost
de duas maneiras:
- Fazer o registro como
AppCardListener
OU,
- Interagir com as APIs
AppCardHost
AppCardListener
O componente AppCardListener
se registra com um AppCardHost
para receber atualizações de comunicação dos apps AppCardHost
e AppCard.
As funções de interface de um AppCardListener
estão detalhadas aqui.
fun onAppCardReceived(AppCardContainer)
AppCardContainer
, que fornece um AppCard e um
appIdentifier
para identificar o app que enviou o AppCardfun onComponentReceived(AppCardComponentContainer)
AppCardComponentContainer
, que fornece
um componente de card do app, Identifier
para identificar o app que enviou o
card e um ID de string para apontar para o card ao qual o componente
está relacionado.fun onProviderRemoved(String, String?)
Se a autoridade for {@code null}
, um pacote inteiro foi removido.
fun onProviderAdded(String, String?)
Exemplo de uso. Use essa função como um acionador para atualizar todos os cards de app
disponíveis em um seletor de cards de app. Se a autoridade for {@code null}
, um pacote
inteiro foi adicionado.
fun onPackageCommunicationError(appIdentifier, Throwable)
AppCardHost
encontra um erro ao
se comunicar com um provedor de cartão de app.
Exemplo de uso. Use esse método para mostrar ao usuário que um card de app selecionado encontrou um erro.
APIs
fun refreshCompatibleapp()
fun destroy()
fun registerListener(AppCardListener)
AppCardListener
.fun unregisterListener(AppCardListener)
AppCardListener
.fun getAllAppCards(AppCardContext)
AppCardListener
registrado com todos
os cards de app fornecidos no sistema com um AppCardContext
específico que
oferece dicas aos provedores sobre como estruturar o card de app.fun requestAppCard(AppCardContext, appIdentifier, String)
AppCardListener
registrado com um
AppCard específico, considerando um AppCardContext
que dá dicas aos provedores
sobre como estruturar o AppCard.fun notifyAppCardRemoved(appIdentifier, String)
fun notifyAppCardInteraction(appIdentifier, String, String, String)
AppCardMessageConstants.InteractionMessageConstants.MSG_INTERACTION_ON_CLICK
.
onClick
que chame essa função com appIdentifier
, o ID do AppCard, o ID do componente
e o ID da interação.fun sendAppCardContextUpdate(AppCardContext, appIdentifier, String)
AppCardContext
para um card de app específico. Por exemplo, ao
mudar do modo "Estacionamento" para o modo "Direção", use esse método para enviar uma
atualização AppCardContext
em que isInteractable
é definido como false
para cada
AppCard ativo.Perguntas frequentes
Onde posso encontrar exemplos de implementações?
Exemplo de host. Mostra todos os App Cards disponíveis no sistema, além dos recursos de teste.
DriverUI e Gerenciador Pano. O gerenciador Pano atua como o seletor, enquanto a DriverUI atua como o apresentador.
Com quantos AppCards cada
AppCardContentProvider
pode ser usado?Um
AppCardContentProvider
pode oferecer suporte a um número infinito de cards de app. No entanto, é importante equilibrar o número de cards de app com a performance degradada em relação a uma experiência do usuário positiva.