본문 바로가기
Android

안드로이드 하드웨어 서비스 03 텔레포니 프레임워크 (2)

by OKOK 2021. 5. 26.

3.2.3 PhoneProxy 클래스

폰프록시 클래스의 주요 역할은 폰 제어를 위한 Phone API를 제공하며 RAT에 상관없이 공통적인 폰 제어 방법을 제공하는 것임. RAT가 스위칭되면 해당 폰 객체 또한 스위칭되므로 텔레포니 프레임워크는 공통의 폰 제어 API를 제공하기 어려움. 따라서 폰 앱이 하부 RAT에 의존하지 않고 공통의 폰 제어 방법을 사용할 수 있도록 PhoneProxy 클래스가 필요함. 프록시 패턴의 장점은 실제 객체와 동일한 인터페이스를 구현한 프록시를 통해 접근하여 클라이언트로부터 최적화와 세부적인 구현 내용을 감추어 코드를 단순화하게 함.

 

3.2.4. Phone 인터페이스

registerForIncomingRing()는 EVENT_INCOMING_RING 이벤트와 같은 서비스 ind를 등록함. 등록된 이벤트는 MT call이 왔을 때 발생됨. 서비스 ind 이벤트를 등록하기 위한 등록 메서드는 세 가지의 인자(이벤트를 처리할 핸들러, 구체적으로 각 이벤트를 구별할 이벤트 ID 및 사용자 정의 데이터)를 필요로 함. 

 

3.2.5 Radio 인터페이스

텔레포니 프레임워크는 모뎀을 제어하기 위해 Radio 인터페이스인 CommandsInterface 인터페이스를 제공함. CommandsInterface 인터페이스에 정의된 모뎀 제어 메서드는 RIL.java 클래스에 의해 구현되며 서비스 ind 이벤트의 등록 및 등록 해제 메서드는 ㅇBaseCommands 클래스에 의해 구현됨. 릴 자바는 송수신을 동시에 처리하기 위해 RILSender 쓰레드와 RILReceiver쓰레드로 구현되어 있으며 릴 데몬과 유닉스 도메인 소켓 통신을 하며 릴 req/resp, ril ind를 송수신함. CommandsInterface 인터페이스의 모뎀 제어 API는 모두 void 타입으로 구성되어 있음.  모뎀 제어 요청의 응답은 모두 비동기 응답이므로 메서드의 반환 값이 아닌 메시지를 통해 받기 때문임. 

 

3.2.6 state tracker 클래스

GsmCallTracker 객체는 네트워크 폴링 동작을 통해 Call 상테가 변경되는 것을 모니터링하여 Call 상태 및 Phone 상태를업데이트하고 앱에 통지함. 

 

3.2.7 CallManager 클래스

VOIP를 지원하기 위해 SIP 프레임워크가 추가되며서 WIFI 네트워크 또는 이동통신 네트워크의 PS 네트워크를 이용하여  SIP call이 가능하게 됨. 안드로이드느 CS call, PS call을 어떻게 동시에 처리할 수 있을까.  하부 네트워크에 관계없이 사용자에게 동일한 Call UI를 제공하는 것은 하부 네트워크에 따라 UI가 달라 발생되는 사용자의 혼란을 최소화하기 위함임. 하부 통신 기술의 추상화.

댓글