Статус монитора, Статус монитора

Типичная комбинация приборов обновляет информацию о вождении, вызовах и мультимедиа всякий раз, когда поступают новые данные. 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) {...}
        };
    }
}

К этим методам можно добавить дополнительные действия (например, рендеринг) для отображения нужной информации.

Статус звонка

Чтобы отслеживать статус вызова, выполните следующие действия:

  1. Расширьте android.telecom.InCallService .
    public class ClusterInCallService extends InCallService {
    ...
    
  2. Зарегистрируйте службу в AndroidManifest.xml .
    <service android:name="com.android.car.cluster.sample.ClusterInCallService"
        android:permission="android.permission.BIND_INCALL_SERVICE"
        android:exported="false">
    
  3. Переопределить onCallAdded и onCallRemoved.
    public void onCallAdded(Call call) {
        ...
        call.registerCallback(mPhoneCallback);
        mPhoneCallback.onStateChanged(call, call.getState());
    }
    public void onCallRemoved(Call call) {
        ...
        call.unregisterCallback(mPhoneCallback);
    }
    
  4. Зарегистрируйте обратные вызовы для получения событий изменения статуса вызова ( Call#registerCallback ).
    private static class PhoneCallback extends Callback {
        ...
        public void onStateChanged(Call call, int state) {...}
    }
    
  5. Используйте поставщиков контента для получения контактной информации:
    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 (например, названия альбома или песни или изображения обложки) или состояния воспроизведения (буферизация, пауза, воспроизведение и остановка). Чтобы обновить статус носителя:

  1. Используйте MediaSessionManager и получите основной контроллер ( #getActiveSessions(null)[0] ).
  2. Зарегистрируйте обратные вызовы ( MediaController#Callback ).
  3. Подписаться на изменение активного сеанса MediaSessionManager#addOnActiveSessionsChangedListener(...) .

Подробности см.: