텔레콤 프레임워크 개요

Android 텔레콤 프레임워크는 Android 기기에서의 음성 및 영상 통화를 관리합니다. 여기에는 SIM 기반 통화(예: 텔레콤 프레임워크 사용)와 ConnectionService API의 구현자가 제공하는 VoIP 통화가 포함됩니다.

텔레콤에서 다루는 두 가지 중요한 구성요소는 ConnectionServiceInCallService가 있습니다. ConnectionService 구현은 몇 가지 수단(예: VoIP)을 사용하여 다른 상대방에게 전화를 연결하는 역할을 합니다. 전화에 대한 가장 일반적인 ConnectionService 구현은 이동통신사 전화를 연결하는 통신 ConnectionService입니다. InCallService 구현은 텔레콤에서 관리하는 통화에 사용자 인터페이스를 제공하고, 사용자에게 이러한 통화를 제어하고 이와 상호작용할 수단을 제공하는 역할을 합니다. 기기와 결합된 전화 앱은 InCallService를 구현한 가장 일반적인 예시입니다.

텔레콤은 ConnectionService 구현에서 제공하는 통화를 InCallService 구현에서 제공하는 통화 사용자 인터페이스에 라우팅하는 스위치보드 역할을 합니다.

다음과 같은 경우에 텔레콤 API를 구현하는 것이 좋습니다.

  1. 시스템 전화 앱을 대체할 것을 만들고자 하는 경우.
  2. Android 통화 환경과 통합되는 통화 솔루션을 만들고자 하는 경우.

대체 전화 앱 만들기

Android 기기에서 기본 전화 앱을 대체할 앱을 만들려면 InCallService API를 구현합니다. InCallService는 통화 기능 없이 통화를 위한 사용자 인터페이스로만 구성되어야 한다는 것을 명심해야 합니다. InCallService는 텔레콤 프레임워크에서 인식하는 모든 통화를 처리해야 합니다. 통화의 성격에 대해 가정해서는 안 되고(예: 통화가 SIM 기반 전화 통화인 것으로 가정), 하나의 ConnectionService에 기반하여 통화에 대한 제한을 구현해서는 안 됩니다(예: 영상 통화에 대한 통신 제한을 강제로 적용해서는 안 됨).

자세한 내용은 InCallService를 참조하세요.

통화 솔루션 통합

통화 솔루션을 Android에 통합하고자 하는 경우 다음과 같은 옵션이 있습니다.

  1. 자체적으로 관리하는 ConnectionService API 구현 - 기본 전화 앱에 통화를 표시하지 않고, 사용자 인터페이스에 다른 통화가 표시되기를 바라지 않는 독립형 통화 앱의 개발자에게 이상적입니다. 기존에 독립형 통화 앱은 휴대전화 상태를 수신해 언제 다른 통화가 발생하는지 알아내는 방법을 사용했습니다. 휴대전화 상태에서는 사용자가 설치한 다른 통화 앱을 고려하지 않기 때문에 이 방법은 문제가 있습니다. 자체적으로 관리하는 ConnectionService를 사용하면 앱이 기기의 네이티브 전화 통화는 물론, 이 API를 구현하는 다른 독립형 통화 앱과도 상호 운용되도록 하는 데 도움이 됩니다. 자체적으로 관리하는 ConnectionService API는 오디오 라우팅과 포커스도 관리해줍니다. 자세한 내용은 자체적으로 관리하는 ConnectionServices를 참조하세요.
  2. 관리형 ConnectionService API 구현 - 기존 기기 전화 애플리케이션(getDefaultDialerPackage() 참조)을 활용하여 통화에 사용자 인터페이스를 제공하는 통화 솔루션 개발에 도움이 됩니다. 타사에서 구현한 SIP 통화 또는 VoIP 통화 서비스를 예로 들 수 있습니다. ConnectionService는 통화를 연결하는 수단만 제공할 뿐, 사용자 인터페이스가 연결되어 있지는 않습니다. 자세한 내용은 ConnectionService를 참조하세요.
  3. InCallServiceConnectionService 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를 통해 다시 라우팅할 수 있습니다.