상태 모니터링

일반적인 계기판은 새 데이터가 들어올 때마다 운전, 통화, 미디어 정보를 업데이트합니다. Android는 OEM의 계기판을 통해 최신 상태를 쉽게 수신할 수 있도록 다음 API를 제공합니다.

운전 상태

내비게이션이 진행 중일 때 운전 경로 이벤트가 전송됩니다. 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(...)를 구독합니다.

자세한 내용을 보려면 다음을 참조하세요.