Configura un host de AppCard

Usa AppCardHost para comunicarte con las apps que muestran tarjetas de apps.

Permisos

Cualquier app que use un AppCardHost debe tener los siguientes permisos:

  • android.permission.INTERACT_ACROSS_USERS_FULL
  • android.permission.QUERY_ALL_PACKAGES
  • (solo en el nivel de API 34 y versiones posteriores) android.car.permission.BIND_APP_CARD_PROVIDER

Inicialización

Para inicializar el host, proporciona lo siguiente:

  • Contexto
  • updateRate Tasa de actualización de la tarjeta de aplicación en milisegundos.
  • fastUpdateRate Tasa de actualización en milisegundos para los componentes etiquetados con EnforceFastUpdateRate
  • responseExecutor Es un subproceso en el que deseas recibir respuestas de las apps de AppCard.

Diseño

Se puede interactuar con un AppCardHost de una de las siguientes maneras:

O

AppCardListener

El componente AppCardListener se registra con un AppCardHost para recibir actualizaciones de comunicación de las apps AppCardHost y AppCard. Aquí se detallan las funciones de interfaz de un AppCardListener.

fun onAppCardReceived(AppCardContainer)

Esta función se activa cuando se recibe una tarjeta de aplicación de una app. Se envía como un AppCardContainer que proporciona una tarjeta de aplicación y un appIdentifier para identificar la app que envió la tarjeta de aplicación.

fun onComponentReceived(AppCardComponentContainer)

Esta función se activa cuando se recibe un componente de AppCard de una app. Se envía como un AppCardComponentContainer, que proporciona un componente de AppCards, Identifier, para identificar la app que envió la AppCard, y un ID de cadena para apuntar a la AppCard con la que está relacionado el componente.

fun onProviderRemoved(String, String?)

Esta función se activa cuando se quita o inhabilita un proveedor de tarjetas de aplicación. Usa este método para limpiar cualquier tarjeta de aplicación activa relacionada con el nombre del paquete y la autoridad del proveedor determinados.

Si la autoridad es {@code null}, se quitó un paquete completo.

fun onProviderAdded(String, String?)

Esta función se activa cuando se agrega o habilita un proveedor de tarjetas de aplicación.

Ejemplo de uso. Usa esta función como activador para actualizar todas las tarjetas de aplicación disponibles en un selector de tarjetas de aplicación. Si la autoridad es {@code null}, se agregó un paquete completo.

fun onPackageCommunicationError(appIdentifier, Throwable)

Esta función se activa cuando AppCardHost encuentra un error cuando se comunica con un proveedor de AppCard.

Ejemplo de uso. Usa este método para mostrarle al usuario que una tarjeta de aplicación que eligió tuvo un error.

APIs

fun refreshCompatibleapp()

Se debe llamar a este método cada vez que se reanuda la actividad que usa el host para que este pueda actualizar su lista de apps que admiten tarjetas de aplicación.

fun destroy()

Llama a este método cuando se destruye una actividad que usa un host para que el host pueda limpiar todas las conexiones y los miembros internos.

fun registerListener(AppCardListener)

Se usa para registrar un AppCardListener.

fun unregisterListener(AppCardListener)

Se usa para cancelar el registro de un AppCardListener.

fun getAllAppCards(AppCardContext)

Llama a este método para proporcionar un AppCardListener registrado con todas las tarjetas de aplicación proporcionadas en el sistema con un AppCardContext determinado que les proporciona sugerencias a los proveedores sobre cómo estructurar su tarjeta de aplicación.

fun requestAppCard(AppCardContext, appIdentifier, String)

Llama a este método para proporcionar un AppCardListener registrado con una AppCard específica, dado un AppCardContext que les da sugerencias a los proveedores sobre cómo estructurar su AppCard.

fun notifyAppCardRemoved(appIdentifier, String)

Notificar a un proveedor de tarjetas de aplicación que su tarjeta de aplicación ya no está activa

fun notifyAppCardInteraction(appIdentifier, String, String, String)

Notifica a un proveedor de la tarjeta de aplicación que se interactuó con ella. La única interacción admitida es un clic en el botón, que se indica con un AppCardMessageConstants.InteractionMessageConstants.MSG_INTERACTION_ON_CLICK.

Te recomendamos que crees un botón para una tarjeta de aplicación con un objeto de escucha onClick que llame a esta función con appIdentifier, el ID de la tarjeta de aplicación, el ID del componente y el ID de interacción.

fun sendAppCardContextUpdate(AppCardContext, appIdentifier, String)

Envía una actualización de AppCardContext para una AppCard específica. Por ejemplo, cuando cambies del modo de estacionamiento al modo de conducción, usa este método para enviar una actualización de AppCardContext en la que isInteractable se establezca en false para cada AppCard activa.

Preguntas frecuentes

  1. ¿Dónde puedo encontrar implementaciones de ejemplo?

    • Host de muestra. Muestra todas las tarjetas de aplicación disponibles en el sistema, junto con las capacidades de prueba.

    • DriverUI y el administrador de Pano El administrador de Pano actúa como el selector, mientras que DriverUI actúa como el presentador.

  2. ¿Cuántas tarjetas de aplicación puede admitir cada AppCardContentProvider?

    Un AppCardContentProvider puede admitir una cantidad infinita de tarjetas de aplicación. Sin embargo, asegúrate de equilibrar la cantidad de tarjetas de aplicación con un rendimiento degradado en comparación con una experiencia del usuario positiva.