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