一般儀表板會在收到新資料時更新行車、通話和媒體資訊。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(...)
。
如需詳細資訊,請參閱: