监控状态

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

有关详情,请参阅: