一般的なインストルメント クラスタは、新しいデータを受信するたびに、運転、通話、メディアの情報を更新します。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) {...} }; } }
これらのメソッドにカスタム アクション(レンダリングなど)を追加することで、必要な情報を表示できます。
通話状況
通話状況をモニタリングするには、次の手順を実行します。
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(...)
に登録します。
詳しくは以下のページをご覧ください。