Telecom フレームワークの概要

Android Telecom フレームワークは、Android デバイスでの音声通話とビデオ通話を管理します。これには、SIM ベースの通話(たとえば、テレフォニー フレームワークを使用した通話)と、ConnectionService API の実装元が提供する VOIP 通話が含まれます。

Telecom が扱う 2 つの主なコンポーネントは、ConnectionServiceInCallService です。ConnectionService 実装は、なんらかの手段(VOIP など)で通話を別の相手に接続します。スマートフォンにおける最も一般的な ConnectionService 実装は、携帯通信会社の通話の接続を行う Telephony ConnectionService です。InCallService 実装は、Telecom が管理する通話にユーザー インターフェースを提供し、そうした通話を制御および操作する手段をユーザーに提供します。デバイスにバンドルされている電話アプリは、InCallService の実装の最も一般的な例です。

Telecom は交換台として機能し、ConnectionService 実装によって提供される通話を、InCallService 実装によって提供される通話ユーザー インターフェースにルーティングします。

Telecom API は、次のような場合に実装します。

  1. システムの電話アプリの代替物を作成したい場合。
  2. Android の通話エクスペリエンスに統合する通話ソリューションを作成したい場合。

代替電話アプリを作成する

Android デバイスでデフォルトの電話アプリの代替物を作成する場合は、InCallService API を実装します。InCallService には通話機能を設定せず、通話用のユーザー インターフェースのみで構成することが重要です。InCallService は、Telecom フレームワークが認識するすべての通話を処理する必要があります。通話の性質を仮定(たとえば、SIM ベースのテレフォニー通話であると仮定)してはなりません。また、いずれか 1 つの ConnectionService に基づいて通話制限を実装してはなりません(たとえば、ビデオ通話に対してテレフォニー制限を適用するべきではありません)。

詳細については、InCallService をご覧ください。

通話ソリューションを統合する

通話ソリューションを Android に統合する場合、次のオプションがあります。

  1. 自己管理型の ConnectionService API を実装する - これは、独立型の通話アプリのデベロッパーが、デフォルトの電話アプリ内に自分のアプリの通話を表示したくない場合、および自分のアプリのユーザー インターフェースに他の通話を表示したくない場合に適しています。従来、独立型の通話アプリは、もっぱらスマートフォンのステータスをリスニングすることにより、他の通話がいつ行われるかを判断しようと試みていました。しかし、これには問題があります。スマートフォンのステータスは、ユーザーがインストールした可能性がある他の通話アプリを考慮していないからです。自己管理型の ConnectionService を使用すると、アプリは、デバイス上のネイティブなテレフォニー通話だけでなく、この API を実装する他の独立型の通話アプリとも相互運用が可能になります。自己管理型の ConnectionService API は、アプリのために音声ルーティングと音声フォーカスも管理します。詳細については、自己管理型の ConnectionService をご覧ください。
  2. マネージド ConnectionService API を実装する - デバイスの既存の電話アプリ(getDefaultDialerPackage() を参照)を使用して通話用ユーザー インターフェースを提供する通話ソリューションの開発が容易になります。例としては、SIP 通話のサードパーティ実装や VOIP 通話サービスがあります。ConnectionService だけでは通話を接続する手段しか提供せず、関連するユーザー インターフェースは含まれていません。詳細については、ConnectionService をご覧ください。
  3. InCallService API と ConnectionService API の両方を実装する - 独自のユーザー インターフェースを備えた、ConnectionService ベースの独自の通話ソリューションを作成し、他のすべての Android 通話も同じユーザー インターフェースで表示する場合に適しています。このアプローチを採用する場合も、InCallService で、表示する通話のソースについてなにも仮定しないようにする必要があります。また、デフォルトの電話アプリをカスタムの InCallService に設定しなくても、ConnectionService 実装が機能するようにする必要があります。

通話をスクリーニングする

Android 10 (API レベル 29) 以上 を実行しているデバイスは、ユーザーのアドレス帳にない発信者からの呼び出しを潜在的なスパム通話と判断し、ユーザーに代わってスパム通話を暗黙的に拒否する手段をアプリに提供します。このようなブロックされた通話の情報は、ブロックされた通話として通話履歴に記録されます。これにより、ユーザーは通話できなかった発信者を明確に認識できます。この新しい API を使用すると、通話のスクリーニング機能と発信者番号機能を提供するためにユーザーから READ_CALL_LOG 権限を取得する必要がなくなります。

通話をリダイレクトする

Android 10 (API レベル 29) 以上 を実行しているデバイスでは、Android 9 以下を実行しているデバイスとは異なる方法で通話インテントが処理されます。NEW_OUTGOING_CALL ブロードキャストは非推奨になり、CallRedirectionService API に置き換えられました。CallRedirectionService API は、Android プラットフォームによる発信を変更するためのインターフェースを提供します。たとえば、サードパーティのアプリが通話をキャンセルし、VoIP 経由で再ルーティングすることが可能です。