VoIP アプリケーションは、通話をシステムの通話履歴に統合できます。これにより、ユーザーは VoIP 通話履歴をシステム電話アプリで一元的に確認し、電話アプリから直接折り返すことができます。このガイドでは、VoIP 通話アプリとシステム電話アプリに必要な変更について説明します。
通話アプリに関する変更
VoIP アプリをシステム通話履歴と統合する手順は次のとおりです。
コールバック インテント フィルタを登録する
システム保護インテント TelecomManager.ACTION_CALL_BACK を登録します。
このインテント フィルタが適切に登録されると、CallsManager.addCall またはその他の関連する Telecom API を使用してアプリが追加する呼び出しは、システムによって自動的にログに記録されます。システムは、この登録済みインテントを使用して、ユーザーが通話アプリで VoIP 通話ログ エントリを選択して電話をかけ直すときに、後でアプリにコールバックを送信します。
<!-- Activity to handle the callback intent from the system dialer --> <activity android:name=".VoipCallActivity" android:exported="true"> <!-- Register callback intent --> <intent-filter> <action android:name="android.telecom.action.CALL_BACK" /> </intent-filter> </activity>
通話ログの記録を除外する
コールバックが登録されると、すべての通話がシステム ダイヤルに記録されます。通話ごとに除外するには、CallAttributesCompat 内で isLogExcluded ブール値を true に設定します。
CallAttributesCompat( displayName = displayName, address = address, isLogExcluded = excludeCallLogging, // to exclude call from logging direction = if (isIncoming) { CallAttributesCompat.DIRECTION_INCOMING } else { CallAttributesCompat.DIRECTION_OUTGOING }, callType = CallAttributesCompat.CALL_TYPE_AUDIO_CALL, callCapabilities = ( CallAttributesCompat.SUPPORTS_SET_INACTIVE or CallAttributesCompat.SUPPORTS_STREAM or CallAttributesCompat.SUPPORTS_TRANSFER ), )
コールバックを処理する
CallsManager.addCall を通じて追加された通話には、CallControlScope.getCallId を通じて一意の UUID が割り当てられます。
// check the intent action for CALL_BACK if (intent.action == TelecomManager.ACTION_CALL_BACK) { launchCall( // fetching stored call details for the UUID to initiate callback callDetails = getCallDetails( uuid = intent.getStringExtra(TelecomManager.EXTRA_UUID) ) ) }
通話履歴のエントリを確認する
システム通話ログは、一定数のエントリを保持し、最終的に古い通話記録を削除します。アプリはコールバック処理のために UUID と通話の詳細のマッピングを保存するため、システム通話ログにどの UUID が残っているかを定期的に確認する必要があります。UUID がシステムログに存在しなくなった場合、ユーザーはその通話のコールバックを開始できなくなり、アプリはローカル ストレージからマッピングを安全に削除できます。このプラクティスは、ストレージの最適化に役立ちます。
システムログ内のアプリに帰属する UUID の現在のリストを取得するには、CallLog.Calls.CONTENT_VOIP_URI を使用します。
電話アプリの変更
次の手順に沿って、電話アプリで VoIP 通話ログを表示し、VoIP アプリへのコールバックを開始できるようにします。
電話アプリで VoIP 通話ログを表示する
デフォルトでは、VoIP アプリの通話履歴は電話アプリに表示されません。統合された通話履歴を電話アプリに表示するには、次の操作を行います。
Android 16.1(API レベル 36.1)では、
CallLog.Callsコンテンツ プロバイダにクエリ パラメータinclude_voip_callsを追加して、VoIP 通話ログを表示します。CallLog.Calls.CONTENT_URI.buildUpon() .appendQueryParameter("include_voip_calls", "true") .build()
Android 17(API レベル 37)以降では、次の形式化されたコンテンツ プロバイダとパラメータ キーを使用します。
電話アプリからコールバックを開始する
ダイヤルからコールバックを開始するには、TelecomManager.placeCall を使用します。プラットフォームは、通話履歴エントリの一意の CallLog.Calls._ID を使用して、適切な VoIP アプリを起動します。この起動には、折り返し電話を開始するためのシステム定義のアクションである TelecomManager.ACTION_CALL_BACK インテントが含まれます。このインテントには、インテント エクストラ TelecomManager.EXTRA_UUID に通話の UUID が含まれており、VoIP アプリはどの通話がコールバックされているかを特定できます。
// Uri generated with unique ID of the call log entry to launch the respective VoIP app for callback val address = ContentUris.withAppendedId(CallLog.Calls.CONTENT_URI, callId) // extra information required to initiate callback val extras = Bundle() telecomManager.placeCall(address, extras)