每当有新数据时,典型仪表板就会更新驾驶、呼叫和/或媒体信息。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 中注册该服务。
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(...)。
如需了解详情,请参阅: