Typowy zestaw wskaźników aktualizuje informacje dotyczące jazdy, połączeń i multimediów za każdym razem, gdy napływają nowe dane. System Android udostępnia następujący interfejs API, dzięki któremu zestaw wskaźników OEM może łatwo uzyskać aktualny stan.
Stan jazdy
Zdarzenia dotyczące kierunku jazdy są wysyłane w trakcie trwania nawigacji. Plik packages/services/Car/car-lib/src/android/car/cluster/renderer/NavigationRenderer.java
zawiera abstrakcyjne metody renderowania aplikacji nawigacyjnej w zestawie wskaźników.
W rozszerzonej usłudze InstrumentClusterRenderingService
metody te są następujące:
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) {...} }; } }
Do tych metod można dodać akcje niestandardowe (takie jak renderowanie), aby wyświetlić żądane informacje.
Stan połączenia
Aby monitorować stan połączenia, wykonaj następujące kroki:
- Rozszerz
android.telecom.InCallService
.public class ClusterInCallService extends InCallService { ...
- Zarejestruj usługę w
AndroidManifest.xml
.<service android:name="com.android.car.cluster.sample.ClusterInCallService" android:permission="android.permission.BIND_INCALL_SERVICE" android:exported="false">
- Zastąp onCallAdded i onCallRemoved.
public void onCallAdded(Call call) { ... call.registerCallback(mPhoneCallback); mPhoneCallback.onStateChanged(call, call.getState()); } public void onCallRemoved(Call call) { ... call.unregisterCallback(mPhoneCallback); }
- Zarejestruj wywołania zwrotne, aby otrzymywać zdarzenia zmiany statusu połączenia (
Call#registerCallback
).private static class PhoneCallback extends Callback { ... public void onStateChanged(Call call, int state) {...} }
- Użyj dostawców treści, aby pobrać informacje kontaktowe:
ContactsContract.PhoneLookup, ContactsContract.Contacts#openContactPhotoInputStream
).
Przykładowy kod monitora stanu połączenia można znaleźć w artykule:
packages/services/Car/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ClusterInCallService.java
Aby zapoznać się z przykładowym kodem dostawcy treści, zobacz:
packages/services/Car/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/TelecomUtils.java
.
Stan mediów
Można skonfigurować system tak, aby aktualizował stan multimediów po odebraniu zdarzeń związanych ze zmianą w MediaMetadata (takich jak tytuł albumu lub utworu albo zdjęcie na okładce) lub stanem odtwarzania (buforowanie, pauza, odtwarzanie i zatrzymanie). Aby zaktualizować stan multimediów:
- Użyj
MediaSessionManager
i uzyskaj główny kontroler (#getActiveSessions(null)[0]
). - Zarejestruj wywołania zwrotne (
MediaController#Callback
). - Subskrybuj po zmianie aktywnej sesji
MediaSessionManager#addOnActiveSessionsChangedListener(...)
.
Aby uzyskać szczegółowe informacje, zobacz:
-
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