Типичная комбинация приборов обновляет информацию о вождении, вызовах и мультимедиа всякий раз, когда поступают новые данные. Android предоставляет следующий API, позволяющий комбинации приборов OEM-производителя легко получать обновленный статус.
Статус вождения
События направления движения отправляются во время навигации. Файл packages/services/Car/car-lib/src/android/car/cluster/renderer/NavigationRenderer.java
содержит абстрактные методы для средства визуализации навигационного приложения в комбинации приборов.
В расширенном InstrumentClusterRenderingService
эти методы следующие:
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) {...} }; } }
К этим методам можно добавить дополнительные действия (например, рендеринг) для отображения нужной информации.
Статус звонка
Чтобы отслеживать статус вызова, выполните следующие действия:
- Расширьте
android.telecom.InCallService
.public class ClusterInCallService extends InCallService { ...
- Зарегистрируйте службу в
AndroidManifest.xml
.<service android:name="com.android.car.cluster.sample.ClusterInCallService" android:permission="android.permission.BIND_INCALL_SERVICE" android:exported="false">
- Переопределить onCallAdded и onCallRemoved.
public void onCallAdded(Call call) { ... call.registerCallback(mPhoneCallback); mPhoneCallback.onStateChanged(call, call.getState()); } public void onCallRemoved(Call call) { ... call.unregisterCallback(mPhoneCallback); }
- Зарегистрируйте обратные вызовы для получения событий изменения статуса вызова (
Call#registerCallback
).private static class PhoneCallback extends Callback { ... public void onStateChanged(Call call, int state) {...} }
- Используйте поставщиков контента для получения контактной информации:
ContactsContract.PhoneLookup, ContactsContract.Contacts#openContactPhotoInputStream
).
Пример кода монитора состояния вызовов см. в разделе:
packages/services/Car/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ClusterInCallService.java
Пример кода поставщика контента см. в разделе:
packages/services/Car/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/TelecomUtils.java
.
Статус СМИ
Вы можете настроить систему на обновление статуса мультимедиа при получении событий, связанных с изменением MediaMetadata (например, названия альбома или песни или изображения обложки) или состояния воспроизведения (буферизация, пауза, воспроизведение и остановка). Чтобы обновить статус носителя:
- Используйте
MediaSessionManager
и получите основной контроллер (#getActiveSessions(null)[0]
). - Зарегистрируйте обратные вызовы (
MediaController#Callback
). - Подписаться на изменение активного сеанса
MediaSessionManager#addOnActiveSessionsChangedListener(...)
.
Подробности см.: