技術的な詳細

次の図は、電話アプリとやり取りするシステム コンポーネントを示しています。

電話アプリとやり取りするコンポーネント

図 1. 電話アプリとやり取りするコンポーネント

  • システム UI。[電話] ボタンをホストする下位のナビゲーション属性は、intent:#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;package=com.android.car.dialer;launchFlags=0x10000000;end インテントを登録するために使用されます。これにより、ユーザーのメイン アクティビティである TelecomActivity が開始されます。

  • アプリ ランチャー。アプリのリスト全体を管理します。電話アプリは android.intent.category.LAUNCHER を使用して TelecomActivity を宣言します。ランチャーのアプリリストからスマートフォン アプリを選択すると、TelecomActivity が表示されます。

  • ホーム ウィジェット。AOSP リファレンスにはホーム ウィジェットはありません。OEM は、現在接続されている電話の状態(およびその他の情報)を表示するために、ホーム ウィジェットを電話アプリに追加することを検討しなければならない場合があります。

  • 通知センター

    • 着信時にヘッドアップ通知(HUN)が表示されます。電話アプリ InCallServiceImpl が着信に応答すると、電話アプリは HUN を通知センターに送信し、通話の詳細(電話番号や連絡先情報など)が通知センターに示されます。電話アプリには [応答] と [拒否] の 2 つの操作ボタンも表示されます。[応答] ボタンをタップして通話に応答すると、InCallServiceImpl は現在の通話を処理して通話 UI に電話アプリを表示し、HUN を終了します。HUN をクリックすると、[応答] ボタンと [拒否] ボタンを含む全画面の着信ページが表示されます。

    • 未読の不在着信がある場合、通知が表示されます。通知をクリックすると、[通話履歴] ページが表示され、不在着信に既読のマークが付きます。[折り返す] ボタンをタップすると通話が発信され、電話アプリの着信ユーザー インターフェースが表示されます。

  • アシスタント。ユーザーは Google アシスタントから電話をかけることができ、電話アプリの着信ユーザー インターフェースを表示できます。

  • Google マップ。Google マップから店舗に電話をかけると、システムはダイヤル intent と電話番号 extra を送信し、クイック ダイヤル用のダイヤルパッド ページを起動します。

  • CarInputService。ハンドル上の [通話] ボタンと [通話を終了] ボタンの物理的なキーを監視します。次のボタンがあります。

    • 着信がないときにハンドルの [通話] ボタンを押すと、ダイヤル intent が送信され、電話アプリの [ダイヤルパッド] ページが表示されます。

    • 着信があったときにハンドルの [通話] ボタンを押すと、TelecomManager が電話に応答します。

    • 着信があったときにハンドルの [通話を終了] ボタンを押すと、TelecomManager が通話を終了します。

  • Bluetooth

    • PBAPClient。スマートフォンから連絡先をダウンロードし、連絡先プロバイダに書き込みます。接続されているスマートフォンごとに、デバイスの Bluetooth MAC アドレスがアカウント名として、com.android.bluetooth.pbapsinkpackages/apps/Bluetooth で定義される @string/pbap_account_type)をアカウント タイプとして使用してアカウントが作成されます。連絡先プロバイダに書き込まれた連絡先は、アカウント情報と一緒に書き込まれ、電話が切断されると消去されます。PBAPClient は電話アプリと直接やり取りするのではなく、連絡先を連絡先プロバイダに書き込みます。電話アプリは連絡先プロバイダから連絡先を読み取ります。

    • HfpClientConnectionServiceHFP を介して Bluetooth 通話を管理し、通話を Telecom サービスに報告します。

  • Telecom。Android Telecom フレームワークは、Android デバイスでの音声通話とビデオ通話を管理します。電話アプリがデフォルトのスマートフォン アプリであるため、InCallService API を実装し、InCallController が電話アプリの InCallService の実装をバインドして、通話を処理します。詳細については、代わりの電話アプリを作成するデフォルトの電話アプリになるをご覧ください。

  • システム設定。電話アプリは、HFP に接続されているデバイスのリストを監視し、Bluetooth 経由で電話アプリにスマートフォン接続していない場合はエラー メッセージが表示されます。AOSP リファレンスでは、[Bluetooth に接続] ボタンを押すと、ユーザーはシステムの [Bluetooth の設定] ページにリンクされ、新しいデバイスのペア設定や、ペア設定したデバイスへの接続が行えます。

  • ドライバーの注意散漫に関するエンジン。この Android システム サービスでは、車の運転状態に基づいて UX 制限が適用されます。電話アプリでは、ドライバーの注意散漫に対するすべての UX 制限を適用する必要があります。このため、電話アプリは CarUXRestrictionManager をリッスンして、すべてのポリシーを実装する必要があります。電話アプリの要件は次のとおりです。

    • Car ライブラリに接続し、CarUXRestrictionManager のインスタンスを取得します。

    • CarUxRestrictions のリストにアップデートを登録し、ドキュメントの説明に沿ってこれらのアップデートを実装します。

    • 次のことは電話アプリにとって特に重要です。

      • [設定] ページは車両向けに最適化されています。運転中、ユーザーは電話アプリの [設定] ページにアクセスできません。アクションバーの [設定] メニューをタップすると、ユーザーが運転中に [設定] にアクセスできないように、ブロック画面が表示されます。[設定] ページがすでに表示されている場合は、ユーザーの操作を防ぐためにブロック画面がポップアップ表示されます。

      • 運転中はシステム設定にアクセスできません。[エラー] ページで、Bluetooth デバイスが接続されていない場合は [Bluetooth に接続する] ボタンをクリックすると、システムの Bluetooth 設定ページが表示されます。このボタンの UXR は完全に制限されています。運転中にこのボタンをクリックするとエラー メッセージが表示され、操作を実行する前に自動車を停止するようユーザーに通知されます。

      • 運転中、ユーザーは「お気に入りに追加」フローを開始できません。[お気に入りとして追加] ボタンは無効になっています。

ユーザーフロー

電話アプリの主なページ

電話アプリの各種ページは次のとおりです。

電話アプリの主なページ

図 2. 電話アプリの主なページ

通話の処理

通話の処理プロセスを以下に示します。

通話の処理

図 3. 通話の処理

通知

下記のようにさまざまな通知ページがあります。

通知

図 4. 通知

InCall ステータス

InCall ページのフローを以下に示します。

InCall ページ

図 5. InCall ページ

次の情報が表示されます。

検索

図 6. 検索

設定

設定項目は次のとおりです。

設定

図 7. 設定