응급 상황 어포던스 구현

2017년 1월 1일부터 인도에서 판매되는 모든 휴대기기는 인도 통신부(DoT) 규제 요건에 따라 긴급 버튼을 포함해야 합니다. 이러한 규제 요건을 충족하기 위해 Android는 Android 기기에서 긴급 버튼을 사용할 수 있도록 응급 상황 어포던스 기능의 참조 구현을 포함하고 있습니다.

이 기능은 Android 8.0 이상에서는 기본적으로 사용 설정되며 이전 출시의 기존 빌드에는 패치를 적용해야 합니다. 현재 이 기능은 인도 시장에서 판매되는 기기만을 타겟팅하지만, 인도 이외의 지역에서는 영향을 미치지 않으므로 전 세계에서 판매되는 모든 기기에 포함될 수 있습니다.

예시 및 소스

응급 상황 어포던스 기능은 Android 오픈소스 프로젝트(AOSP) 프레임워크/기본 프로젝트에서 구현됩니다. 이 기능은 기본 브랜치에서 사용할 수 있으며 Android 8.0 및 이후 버전에서 기본적으로 사용 설정됩니다.

현재 다음과 같은 분기와 커밋에서 이 기능을 사용할 수 있습니다. 이 정보는 기기 제조업체가 필요한 변경사항을 기존 빌드에 쉽게 패치할 수 있도록 제공됩니다. AOSP 참조 응급 상황 어포던스 기능을 구현하려는 기기 제조업체는 해당하는 분기에서 고유한 빌드에 맞는 커밋을 선택할 수 있습니다.

표 1. AOSP 참조 응급 상황 어포던스 기능을 위한 선택

분기 커밋
기본 e0c3c66 응급 상황 어포던스 기능 추가됨
42a4338 응급 상황 조치 문자열 번역 추가됨
4df8d64 태블릿에 응급 상황 어포던스가 표시되는 문제 해결됨
nougat-dev e6680d9 응급 상황 어포던스 기능 추가됨
95e1865 응급 상황 조치 문자열 번역 추가됨
a70bb89 태블릿에 응급 상황 어포던스가 표시되는 문제 해결됨
marshmallow-dev cd22634 응급 상황 어포던스 기능 추가됨
13f51c6 응급 상황 조치 문자열 번역 추가됨
6531666 태블릿에 응급 상황 어포던스가 표시되는 문제 해결됨
lollipop-mr1-dev 5fbc86b 응급 상황 어포던스 기능 추가됨
1b60879 응급 상황 조치 문자열 번역 추가됨
d74366f 태블릿에 응급 상황 어포던스가 표시되는 문제 해결됨

구현

응급 상황 어포던스 기능은 Android 소프트웨어 개발 키트(SDK)를 통해 노출되는 API를 변경하지 않습니다. 이 기능이 사용 설정 및 활성화되면 112 긴급 전화를 시작할 수 있는 두 개의 트리거가 제공됩니다. 112는 인도에서 사용되며 인도 DoT 규정에 명시되어 있는 단일 긴급 전화번호입니다.

긴급 전화는 다음 중 한 가지 방법으로 시작됩니다.

잠금 화면에서 긴급전화
버튼을 길게 누르기
전역 작업 메뉴에서
긴급전화 옵션 탭하기
긴급전화 버튼
그림 1. 잠금 화면의 긴급전화 버튼
긴급전화 옵션
그림 2. 전역 작업 메뉴의 긴급전화 작업(전원 키를 길게 눌러 액세스)

이 기능에는 다음과 같은 내부 구성요소가 사용됩니다.

  • EmergencyAffordanceManager
    frameworks/base/core/java/com/android/internal/policy/EmergencyAffordanceManager.java
    
  • EmergencyAffordanceService
    frameworks/base/services/core/java/com/android/server/emergency/EmergencyAffordanceService.java
    

EmergencyAffordanceManager

EmergencyAffordanceManager는 응급 상황 어포던스 기능을 사용하기 위한 내부 API를 제공합니다. 이 기능을 사용 설정해야 한다면 긴급 전화를 시작하고 런타임 시 쿼리하기 위한 메서드를 제공합니다.

  • void performEmergencyCall(). 긴급 전화를 시작합니다.
  • boolean needsEmergencyAffordance(). 기능을 활성화할지 여부를 결정합니다.

EmergencyAffordanceManager.ENABLED 상수를 false로 변경하면 빌드 시 이 기능이 영구적으로 사용 중지될 수 있습니다. 그러면 needsEmergencyAffordance()가 항상 false를 반환하고 EmergencyAffordanceService의 시작이 차단됩니다.

EmergencyAffordanceService

EmergencyAffordanceService는 감지된 모든 데이터 네트워크의 모바일 국가 코드(MCC) 및 설치된 SIM 카드의 MCC를 모니터링하는 시스템 서비스입니다. 설치된 SIM 카드 또는 감지된 데이터 네트워크에 인도의 MCC(404 또는 405) 중 하나와 일치하는 MCC가 있는 경우 이 기능이 사용 설정됩니다. 즉, SIM 카드가 없어도 인도에서 이 기능을 사용 설정할 수 있습니다. SIM 카드가 설치되지 않아도 모바일 네트워크에서 긴급 전화 등록을 허용할 것이라고 가정합니다. 인도 외부의 SIM이 설치되고 감지된 네트워크 중 일치하는 MCC가 없을 때까지 이 기능은 사용 설정된 상태로 유지됩니다.

다음 리소스 및 설정은 응급 상황 어포던스 기능의 동작에 영향을 미칩니다. 구성 유형은 다음과 같습니다.

  • 리소스: 내부 리소스이며 frameworks/base/core/res/res/values/config.xml에 정의됩니다.
  • 설정: 시스템 설정 제공자에 저장된 설정입니다.

표 2. 응급 상황 어포던스 기능의 동작에 영향을 미치는 설정

구성 유형 이름 설명
리소스 config_emergency_call_number 긴급 전화가 시작될 때 자동으로 전화를 거는 전화번호입니다.
유형: 문자열
기본값: 112
리소스 config_emergency_mcc_codes 기능이 활성화되어야 하는 MCC를 나열하는 정수 배열입니다.
유형: 정수 배열
기본값: {404,405}
설정 emergency_affordance_number 응급 상황 어포던스로 전화해야 할 번호로 전역 설정을 재정의합니다. 디버그 가능한 빌드 이미지에만 영향을 줍니다(즉, 빌드 유형이 userdebug 또는 eng). 테스트 목적으로만 사용됩니다.
유형: 문자열
기본값: 설정되지 않음
설정 force_emergency_affordance 기기 상태에 관계없이 응급 상황 어포던스를 표시할지 여부를 나타내는 전역 설정입니다. 테스트 목적으로만 사용됩니다.
유형: 부울(1 또는 0)
기본값: 설정되지 않음 --> 0

112로의 긴급 전화 사용 설정

응급 상황 어포던스 기능은 잠금 화면이 활성 상태일 때 통화가 연결되도록 응급 상황 다이얼러를 사용하여 통화를 연결합니다. 응급 상황 다이얼러는 시스템 속성을 통해 RIL(Radio Interface Layer)에서 제공한 숫자 목록으로만 전화를 연결합니다.

  • SIM이 설치되지 않은 경우 ril.ecclist입니다.
  • SIM이 삽입되고 SimSlotNumber가 기본 가입자의 슬롯 ID이면 ril.ecclistSimSlotNumber입니다.

응급 상황 어포던스 기능을 사용하는 기기 제조업체는 인도의 기기가 항상 RIL에서 긴급 전화번호로 112를 사용 설정하도록 해야 합니다.

유효성 검사

디버그 가능한 빌드에서 테스트하는 동안 전화하는 번호는 다음 명령어로 변경할 수 있습니다.

adb shell settings put global emergency_affordance_number NUMBER_TO_CALL

이 설정은 일반 사용자 빌드에서도 설정할 수 있지만 그러면 무시됩니다. 실제로 전화를 걸려면 번호가 RIL에서 제공한 긴급 전화번호 목록에 있어야 합니다. userdebug 기기의 루트 셸에서 다음 명령어를 실행하여 임시로 설정할 수 있습니다.

setprop ril.ecclist "$(getprop ril.ecclist),NUMBER_TO_CALL"

다음 명령어는 인도 모바일 네트워크가 감지되지 않거나 인도 SIM 카드가 삽입되지 않은 상태에서도 응급 상황 어포던스 기능을 사용하도록 강제할 수 있습니다.

adb shell settings put global force_emergency_affordance 1

최소한 다음과 같은 경우를 테스트하는 것이 좋습니다.

  • 활성화되면 잠금 화면에서 긴급전화 버튼(그림 1)을 길게 누르면 지정된 긴급 전화번호로 통화가 시작됩니다.
  • 활성화되면 전역 작업 메뉴에 긴급전화 항목이 표시되며 이 항목을 탭하면 지정된 긴급 전화번호로 통화가 시작됩니다.
  • 인도 외부의 SIM 카드가 설치되어 있고 감지된 인도 모바일 네트워크가 없는 경우에는 이 기능이 활성화되지 않습니다.
  • 감지된 모바일 네트워크와 관계없이 인도 SIM 카드가 설치된 경우 기기에서는 이 기능이 활성화됩니다.
  • 설치된 SIM 카드와 상관없이 인도 모바일 네트워크가 있는 기기에서는 이 기능이 활성화됩니다.

기기에서 여러 SIM 카드가 지원되면 각 SIM 슬롯에서 SIM MCC 감지가 제대로 작동하는지 테스트해야 합니다. 응급 상황 어포던스 기능은 Android 호환성의 영향을 받지 않으므로 호환성 테스트 모음(CTS) 테스트가 없습니다.

자주 묻는 질문(FAQ)

Q. 긴급 전화번호 112는 아직 인도에서 시범 운영되지 않았습니다. 그래도 사용해야 하나요?

112는 인도의 IECRS(Integrated Emergency Communications and Response Systems)에서 정의한 PSAP(Public Safety Answering Point)로 사용될 번호입니다. PSAP가 시범 운영될 때까지 112번으로 걸려오는 모든 전화는 기존의 100번 긴급 전화번호로 라우팅됩니다. 하지만 이는 Android가 아니라 이동통신사의 책임입니다.

Q. 전원 버튼을 3번 누르는 등 다른 트리거도 구현할 수 있나요?

기기 제조업체에서 추가 트리거를 구현할 수도 있습니다. 그러나 인도 DoT에서는 하드웨어 전원 버튼을 3번 탭하는 것을 승인하지만 AOSP 참조 구현에서는 이 트리거가 지원되지 않습니다. 일부 널리 사용되는 애플리케이션(예: 카메라 앱)에서 전원 버튼을 반복해서 탭하는 등의 전원 버튼 동작을 사용하기 때문입니다. 이러한 애플리케이션이 응급 상황 다이얼러에 방해가 될 수 있고, 사용자가 이러한 애플리케이션에서 작업을 트리거하려고 할 때 실수로 긴급 버튼이 트리거될 수 있습니다.