Monitorar status

Um cluster de instrumentos típico atualiza informações de direção, chamada e mídia sempre que novos dados novos dados chegam. O Android oferece a API abaixo para permitir que o cluster de instrumentos de um OEM receba o status atualizado facilmente.

Status de direção

Os eventos de rota de carro são enviados enquanto a navegação está em andamento. O arquivo packages/services/Car/car-lib/src/android/car/cluster/renderer/NavigationRenderer.java contém métodos abstratos para um renderizador de app 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) {...}
        };
    }
}

É possível adicionar ações personalizadas (como renderização) a esses métodos para exibir anúncios informações imprecisas ou inadequadas.

Status da ligação

Para monitorar o status da chamada, siga estas etapas:

  1. Estenda android.telecom.InCallService.
    public class ClusterInCallService extends InCallService {
    ...
  2. 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">
  3. Substitui onCallAdded e onCallRemoved.
    public void onCallAdded(Call call) {
        ...
        call.registerCallback(mPhoneCallback);
        mPhoneCallback.onStateChanged(call, call.getState());
    }
    public void onCallRemoved(Call call) {
        ...
        call.unregisterCallback(mPhoneCallback);
    }
  4. Registrar callbacks para receber eventos de mudança de status da chamada (Call#registerCallback).
    private static class PhoneCallback extends Callback {
        ...
        public void onStateChanged(Call call, int state) {...}
    }
  5. Use provedores de conteúdo para extrair dados de contato:
    ContactsContract.PhoneLookup, ContactsContract.Contacts#openContactPhotoInputStream).

Para conferir o exemplo de código do monitor de status de chamadas, consulte:
packages/services/Car/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ClusterInCallService.java

Para conferir um exemplo de código 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 quando receber eventos relacionados a um alteração em MediaMetadata (como título do álbum ou da música ou imagem da capa) ou no estado de reprodução (armazenamento em buffer, pausar, reproduzir e parar). Para atualizar o status da mídia:

  1. Usar MediaSessionManager e conseguir o controle principal #getActiveSessions(null)[0]).
  2. Registrar callbacks (MediaController#Callback).
  3. A opção "Inscrever-se em na sessão ativa" foi alterada MediaSessionManager#addOnActiveSessionsChangedListener(...):

Para obter informações, consulte: