典型的仪表盘会在新数据传入时更新驾驶、通话和媒体信息。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(...)
。
有关详情,请参阅: