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_FULLandroid.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
updateRateTasa de actualización de la tarjeta de aplicación en milisegundos.fastUpdateRateTasa de actualización en milisegundos para los componentes etiquetados conEnforceFastUpdateRateresponseExecutorEs 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:
- Regístrate como
AppCardListener
O
- Interactuar con las APIs de
AppCardHost
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)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)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?)Si la autoridad es {@code null}, se quitó un paquete completo.
fun onProviderAdded(String, String?)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)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()fun destroy()fun registerListener(AppCardListener)AppCardListener.fun unregisterListener(AppCardListener)AppCardListener.fun getAllAppCards(AppCardContext)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)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)fun notifyAppCardInteraction(appIdentifier, String, String, String)AppCardMessageConstants.InteractionMessageConstants.MSG_INTERACTION_ON_CLICK.
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)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
¿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.
¿Cuántas tarjetas de aplicación puede admitir cada
AppCardContentProvider?Un
AppCardContentProviderpuede 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.