타사 통화 앱 지원

Android 9는 타사(3P) 통화 앱을 더 잘 지원하는 API를 제공합니다. 3P 통화 앱은 일반적으로 PHONE_STATE 브로드캐스트와 같은 텔레포니 API를 사용하여 이동통신사 전화 통화와 함께 공존합니다. 결과적으로 3P 통화 앱은 이동통신사 이용 통화에 우선권을 부여해야 하므로 자동으로 앱에서 수신 전화를 거부하거나 이동통신사 이용 통화를 위해 진행 중인 통화를 종료해야 하는 경우가 많습니다.

Android 9의 API는 3P 앱과 이동통신사 이용 통화 간의 동시 통화 시나리오를 지원합니다. 예를 들어 이동통신사 이용 통화를 하는 동안 수신되는 3P 전화를 받을 수 있습니다. 이 프레임워크에서는 사용자가 3P 통화에 참여할 때 이동통신사 이용 통화를 유지해야 합니다.

Android 9에서 3P 통화 앱은 자체 관리 ConnectionService API를 구현하는 것이 좋습니다. 이 API를 사용하여 통화 앱을 빌드하는 방법에 관한 자세한 내용은 통화 앱 빌드를 참조하세요.

자체 관리 ConnectionService API를 사용하면 개발자가 시스템 통화 기록에 앱의 통화가 기록되도록 선택할 수 있습니다(EXTRA_LOG_SELF_MANAGED_CALLS 참조). Android 호환성 정의 문서(CDD)의 요구사항(섹션 7.4.1.2)에 따라 다이얼러/전화 앱에 이러한 통화 기록 항목이 표시되고 통화가 시작된 3P 통화 앱의 이름이 표시되도록 해야 합니다. AOSP 다이얼러 앱이 이 요구사항을 충족하는 방법에 관한 예는 3P 통화 앱의 통화 기록 항목을 참조하세요.

앱은 앱 연결에서 CAPABILITY_SUPPORT_HOLDCAPABILITY_HOLD를 설정해야 합니다. 그러나 앱에서 통화를 대기할 수 없는 상황도 있습니다. 프레임워크에는 이러한 유형의 사례를 해결하는 조항이 포함되어 있습니다.

시나리오

다이얼러 앱을 수정하여 다음 시나리오를 처리해야 합니다.

진행 중인 통화의 연결을 끊는 수신 전화 처리

통화 대기를 지원하지 않는 진행 중인 3P 통화(예: SuperCaller 통화)가 있고 사용자가 이동통신사 FooCom 등을 통해 모바일 통화를 수신하는 시나리오에서는 다이얼러/전화 앱에서 사용자에게 모바일 네트워크 통화에 응답하면 진행 중인 3P 통화가 종료된다고 표시해야 합니다.

이 사용자 환경은 3P 통화 앱에 프레임워크에서 통화 대기할 수 없는 진행 중인 통화가 있을 수 있으므로 중요합니다. 새로운 모바일 통화에 응답하면 진행 중인 3P 통화의 연결이 끊어집니다.

아래 사용자 인터페이스 예를 참조하세요.

진행 중인 3P 통화의 연결을 끊는 수신 전화
그림 1. 진행 중인 3P 통화의 연결을 끊는 수신 전화

다이얼러 앱은 통화 Extras를 확인하여 수신 전화로 인해 다른 통화의 연결이 끊어졌는지 확인할 수 있습니다. EXTRA_ANSWERING_DROPS_FG_CALLTRUE로 설정되어 있고 EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME이 수신 모바일 전화에 응답할 때 통화 연결이 끊긴 앱 이름으로 설정되어 있는지 확인하세요.

3P 통화 앱의 통화 기록 항목

3P 통화 앱 개발자는 앱의 통화가 시스템 통화 기록에 기록되도록 선택할 수 있습니다(EXTRA_LOG_SELF_MANAGED_CALLS 참조). 즉, 모바일 네트워크 통화용이 아닌 통화 기록에 항목이 있을 수 있습니다.

AOSP 다이얼러 앱에서 3P 통화 앱과 관련된 통화 기록 항목을 표시하면 다음과 같이 통화가 발생한 앱의 이름이 통화 기록에 표시됩니다.

3P 통화 앱이 있는 통화 기록 항목
그림 2. 다이얼러 앱에서 3P 통화 앱의 이름이 있는 통화 기록 항목

통화 기록 항목과 연결된 앱의 이름을 확인하려면 통화 기록 제공업체의 PHONE_ACCOUNT_COMPONENT_NAMEPHONE_ACCOUNT_ID 열을 사용하여 통화 기록 항목의 소스를 식별하는 PhoneAccountHandle의 인스턴스를 만듭니다. TelecomManager에 쿼리하여 PhoneAccount의 세부정보를 가져옵니다.
통화 기록 항목이 3P 통화 앱에서 온 것인지 확인하려면 CAPABILITY_SELF_MANAGED가 설정되어 있는지 PhoneAccount 기능을 확인합니다.

반환된 PhoneAccountgetLabel 메서드는 3P 통화 앱에서 통화 기록 항목과 연결된 앱의 이름을 반환합니다.

유효성 검사

기기에서 3P 통화 앱을 지원하는지 테스트하려면 자체 관리 ConnectionService API를 구현하는 Telecomm 테스트 애플리케이션을 사용하세요. 애플리케이션은 /packages/services/Telecomm/testapps/에 있습니다.

  1. 다음을 사용하여 Android 소스 저장소의 루트에서 테스트 앱을 빌드합니다.

    mmma packages/services/Telecomm/testapps/

  2. adb install -g -r <apk path>를 사용하여 빌드 APK를 설치합니다. 그러면 자체 관리 샘플 아이콘이 런처에 추가됩니다.

  3. 아이콘을 탭하여 테스트 애플리케이션을 엽니다.

진행 중인 통화의 연결을 끊는 수신 전화 처리

다음 단계를 따라 수신 전화가 진행 중인 3P 통화 연결을 끊는지 확인하세요.

3P 통화 앱의 테스트 애플리케이션
그림 3. 자체 관리 ConnectionService API의 샘플 구현이 있는 테스트 애플리케이션
  1. 통화 대기 가능 옵션을 선택 해제합니다.
  2. 발신을 탭하여 새로운 샘플 발신 전화를 시작합니다.
  3. 활성 버튼을 탭하여 통화를 활성화합니다.
  4. 다른 전화를 사용하여 테스트 중인 기기의 전화번호로 전화를 겁니다. 이렇게 하면 다이얼러에 앱의 이름이 제공되어 통화 연결이 끊기는 시나리오가 발생합니다.
  5. 작업을 완료하면 테스트 앱에서 연결 끊기 버튼을 탭합니다.

3P 통화 앱의 통화 기록 항목

위 단계를 완료하고 나면 테스트 앱이 시스템 통화 기록에 통화를 기록했어야 합니다. 기기에서 3P 통화 앱의 통화를 기록하는지 확인하려면 다이얼러 앱을 열고 시스템 통화 기록에 통화가 표시되는지 확인합니다.