Un grupo de instrumentos típico actualiza la información de conducción, llamadas y medios cada vez que ingresan nuevos datos. Android proporciona la siguiente API para permitir que el grupo de instrumentos de un OEM reciba el estado actualizado fácilmente.
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 el renderizador de una aplicación de navegación en el grupo 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) {...} }; } }
Puede agregar acciones personalizadas (como renderizado) a estos métodos para mostrar la información deseada.
Estado de la llamada
Para monitorear el estado de la llamada, siga los siguientes pasos:
- Ampliar
android.telecom.InCallService
.public class ClusterInCallService extends InCallService { ...
- Registre el servicio en
AndroidManifest.xml
.<service android:name="com.android.car.cluster.sample.ClusterInCallService" android:permission="android.permission.BIND_INCALL_SERVICE" android:exported="false">
- Anule onCallAdded y onCallRemoved.
public void onCallAdded(Call call) { ... call.registerCallback(mPhoneCallback); mPhoneCallback.onStateChanged(call, call.getState()); } public void onCallRemoved(Call call) { ... call.unregisterCallback(mPhoneCallback); }
- Registre 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) {...} }
- Utilice proveedores de contenido para obtener información de contacto:
ContactsContract.PhoneLookup, ContactsContract.Contacts#openContactPhotoInputStream
).
Para obtener un código de muestra del monitor de estado de llamada, consulte:
packages/services/Car/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ClusterInCallService.java
Para obtener código de muestra del proveedor de contenido, consulte:
packages/services/Car/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/TelecomUtils.java
.
Estado de los medios
Puede configurar el sistema para actualizar el estado de los medios 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 parada). Para actualizar el estado de los medios:
- Utilice
MediaSessionManager
y obtenga el controlador principal (#getActiveSessions(null)[0]
). - Registre devoluciones de llamadas (
MediaController#Callback
). - Suscríbase a una sesión activa modificada
MediaSessionManager#addOnActiveSessionsChangedListener(...)
.
Para más detalles, consulte:
-
packages/services/Car/+/android-8.1.0_r9/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/MediaStateMonitor.java
-
packages/services/Car/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/InstrumentClusterController.java