Monitorare lo stato, monitorare lo stato

Un tipico quadro strumenti aggiorna le informazioni su guida, chiamate e contenuti multimediali ogni volta che arrivano nuovi dati. Android fornisce la seguente API per consentire al quadro strumenti di un OEM di ricevere facilmente lo stato aggiornato.

Stato di guida

Gli eventi relativi alle indicazioni di guida vengono inviati mentre la navigazione è in corso. Il file packages/services/Car/car-lib/src/android/car/cluster/renderer/NavigationRenderer.java contiene metodi astratti per un renderer dell'app di navigazione nel quadro strumenti.

In un InstrumentClusterRenderingService esteso, questi metodi sono i seguenti:

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) {...}
        };
    }
}

È possibile aggiungere azioni personalizzate (come il rendering) a questi metodi per visualizzare le informazioni desiderate.

Stato della chiamata

Per monitorare lo stato della chiamata, attenersi alla seguente procedura:

  1. Estendi android.telecom.InCallService .
    public class ClusterInCallService extends InCallService {
    ...
    
  2. Registra il servizio in AndroidManifest.xml .
    <service android:name="com.android.car.cluster.sample.ClusterInCallService"
        android:permission="android.permission.BIND_INCALL_SERVICE"
        android:exported="false">
    
  3. Sostituisci 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. Registra le richiamate per ricevere eventi di modifica dello stato della chiamata ( Call#registerCallback ).
    private static class PhoneCallback extends Callback {
        ...
        public void onStateChanged(Call call, int state) {...}
    }
    
  5. Utilizza i fornitori di contenuti per estrarre le informazioni di contatto:
    ContactsContract.PhoneLookup, ContactsContract.Contacts#openContactPhotoInputStream ).

Per il codice di esempio del monitoraggio dello stato delle chiamate, vedere:
packages/services/Car/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ClusterInCallService.java

Per il codice di esempio del fornitore di contenuti, vedere:
packages/services/Car/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/TelecomUtils.java .

Stato dei media

È possibile configurare il sistema per aggiornare lo stato del supporto quando riceve eventi relativi a una modifica nei MediaMetadata (come il titolo dell'album o del brano o l'immagine di copertina) o lo stato di riproduzione (buffering, pausa, riproduzione e arresto). Per aggiornare lo stato del supporto:

  1. Utilizza MediaSessionManager e ottieni il controller primario ( #getActiveSessions(null)[0] ).
  2. Registrare le richiamate ( MediaController#Callback ).
  3. Iscriviti a una sessione attiva modificata MediaSessionManager#addOnActiveSessionsChangedListener(...) .

Per i dettagli, vedere: