Un clúster de instrumentos típico actualiza la información de conducción, llamadas y contenido multimedia cada vez que llegan datos nuevos. Android proporciona la siguiente API para permitir que el clúster de instrumentos de un OEM reciba el estado actualizado con facilidad.
Estado de conducción
Los eventos de dirección de conducción se envían mientras la navegación está en curso. El archivo packages/services/Car/car-lib/src/android/car/cluster/renderer/NavigationRenderer.java
contiene métodos abstractos para un renderizador de apps de navegación en el clúster de instrumentos.
En un InstrumentClusterRenderingService
extendido, estos métodos son los siguientes:
public class MyClusterRenderingService extends InstrumentClusterRenderingService { ... @Override protected NavigationRenderer getNavigationRenderer() { return new NavigationRenderer() { @Override CarNavigationInstrumentCluster getNavigationProperties() {...} @Override void onStartNavigation() {...} @Override void onStopNavigation() {...} @Override void onNextTurnChanged(int event, String road, int turnAngle, int turnNumber, Bitmap image, int turnSide) {...} @Override void onNextTurnDistanceChanged(int distanceMeters, int timeSeconds) {...} }; } }
Puedes agregar acciones personalizadas (como la renderización) a estos métodos para mostrar la información deseada.
Estado de la llamada
Para supervisar el estado de las llamadas, sigue estos pasos:
- Expande
android.telecom.InCallService
.public class ClusterInCallService extends InCallService { ...
- Registra el servicio en
AndroidManifest.xml
.<service android:name="com.android.car.cluster.sample.ClusterInCallService" android:permission="android.permission.BIND_INCALL_SERVICE" android:exported="false">
- Anula onCallAdded y onCallRemoved.
public void onCallAdded(Call call) { ... call.registerCallback(mPhoneCallback); mPhoneCallback.onStateChanged(call, call.getState()); } public void onCallRemoved(Call call) { ... call.unregisterCallback(mPhoneCallback); }
- Registra devoluciones de llamada para recibir eventos de cambio de estado de llamada (
Call#registerCallback
).private static class PhoneCallback extends Callback { ... public void onStateChanged(Call call, int state) {...} }
- Usa proveedores de contenido para extraer información de contacto:
ContactsContract.PhoneLookup, ContactsContract.Contacts#openContactPhotoInputStream
).
Para ver el código de muestra del monitor de estado de llamadas, consulta:
packages/services/Car/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ClusterInCallService.java
Para ver el código de muestra del proveedor de contenido, consulta:
packages/services/Car/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/TelecomUtils.java
.
Estado del contenido multimedia
Puedes configurar el sistema para que actualice el estado del contenido multimedia cuando reciba eventos relacionados con un cambio en MediaMetadata (como el título del álbum o la canción, o la imagen de portada) o el estado de reproducción (almacenamiento en búfer, pausa, reproducción y detención). Para actualizar el estado del contenido multimedia, haz lo siguiente:
- Usa
MediaSessionManager
y obtén el controlador principal (#getActiveSessions(null)[0]
). - Registrar devoluciones de llamada (
MediaController#Callback
) - Suscríbete a
MediaSessionManager#addOnActiveSessionsChangedListener(...)
cuando cambie la sesión activa.
Para obtener detalles, consulta: