ステータスのモニタリング

一般的なインストルメント クラスタは、新しいデータを受信するたびに、運転、通話、メディアの情報を更新します。Android では、OEM のインストルメント クラスタが最新のステータスを簡単に受信できるように、次の API が用意されています。

運転状況

ナビゲーション実行中に運転ルートイベントが送信されます。ファイル 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(...) に登録します。

詳しくは以下のページをご覧ください。