Um painel de instrumentos típico atualiza informações de direção, chamada e mídia sempre que novos dados chegam. O Android fornece a seguinte API para permitir que o painel de instrumentos de um OEM receba facilmente o status atualizado.
Estado de condução
Os eventos de direção de direção são enviados enquanto a navegação está em andamento. O packages/services/Car/car-lib/src/android/car/cluster/renderer/NavigationRenderer.java
contém métodos abstratos para um renderizador de aplicativo de navegação no cluster de instrumentos.
Em um InstrumentClusterRenderingService
estendido, esses métodos são os seguintes:
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) {...}
};
}
}
Você pode adicionar ações personalizadas (como renderização) a esses métodos para exibir as informações desejadas.
Status da chamada
Para monitorar o status da chamada, siga as seguintes etapas:
- Estenda
android.telecom.InCallService
.public class ClusterInCallService extends InCallService {
... - Registre o serviço em
AndroidManifest.xml
.<service android:name="com.android.car.cluster.sample.ClusterInCallService"
android:permission="android.permission.BIND_INCALL_SERVICE"
android:exported="false"> - Substitua onCallAdded e onCallRemoved.
public void onCallAdded(Call call) {
...
call.registerCallback(mPhoneCallback);
mPhoneCallback.onStateChanged(call, call.getState());
}
public void onCallRemoved(Call call) {
...
call.unregisterCallback(mPhoneCallback);
} - Registre retornos de chamada para receber eventos de mudança de status de chamada (
Call#registerCallback
).private static class PhoneCallback extends Callback {
...
public void onStateChanged(Call call, int state) {...}
} - Use provedores de conteúdo para obter informações de contato:
ContactsContract.PhoneLookup, ContactsContract.Contacts#openContactPhotoInputStream
).
Para obter o código de exemplo do monitor de status de chamada, consulte:
packages/services/Car/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ClusterInCallService.java
Para ver o código de exemplo do provedor de conteúdo, consulte:
packages/services/Car/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/TelecomUtils.java
.
Status da mídia
Você pode configurar o sistema para atualizar o status da mídia ao receber eventos relacionados a uma alteração no MediaMetadata (como título de álbum ou música ou imagem de capa) ou estado de reprodução (armazenamento em buffer, pausa, reprodução e parada). Para atualizar o status da mídia:
- Use
MediaSessionManager
e obtenha o controlador primário (#getActiveSessions(null)[0]
). - Registre retornos de chamada (
MediaController#Callback
). - Inscrever-se na sessão ativa alterada
MediaSessionManager#addOnActiveSessionsChangedListener(...)
.
Para obter detalhes, 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