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>
통화 로깅 제외
콜백이 등록되면 모든 통화가 시스템 다이얼러에 로깅됩니다. 통화를 통화별로 제외하려면 isLogExcluded
불리언을 true 내에서 CallAttributesCompat로 설정합니다.
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)에서 쿼리 매개변수
include_voip_calls를CallLog.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)