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_FULLandroid.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
updateRateTaxa de atualização do card do app em milissegundos.fastUpdateRateTaxa de atualização em milissegundos para componentes marcados comEnforceFastUpdateRateresponseExecutorUma 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
AppCardContentProviderpode ser usado?Um
AppCardContentProviderpode 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.