監控狀態,監控狀態

典型的儀錶板會在新資料到來時更新駕駛、呼叫和媒體資訊。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(...)

詳細資訊請參閱: