Wdrażanie ulg w sytuacjach awaryjnych

Wszystkie urządzenia mobilne sprzedawane w Indiach od 1 stycznia 2017 r. muszą mieć przycisk alarmowy, aby spełniać wymagania indyjskiego Departamentu Telekomunikacji (DoT). Aby spełnić te wymagania, Android zawiera referencyjne wdrożenie funkcji pomocy w sytuacji awaryjnej, która umożliwia użycie przycisku paniki na urządzeniach z Androidem.

Ta funkcja jest domyślnie włączona w Androidzie 8.0 i nowszych wersjach, ale musi zostać wdrożona w dotychczasowych wersjach. Ta funkcja jest przeznaczona wyłącznie do urządzeń sprzedawanych na rynku indyjskim, ale może być uwzględniona na wszystkich urządzeniach sprzedawanych na całym świecie, ponieważ poza Indiami nie ma ona żadnego wpływu.

Przykłady i źródło

Funkcja Emergency Affordance jest implementowana w ramach projektu frameworks/base w ramach Projektu Android Open Source (AOSP). Jest ona dostępna w głównej gałęzi i domyślnie włączona w wersjach Androida 8.0 i nowszych.

Ta funkcja jest dostępna w tych gałęziach i komitach: Te informacje są udostępniane, aby umożliwić producentom urządzeń łatwe wdrożenie niezbędnych poprawek w dotychczasowych wersjach. Producenci urządzeń, którzy chcą zaimplementować referencyjną funkcję AOSP dotyczącą ułatwień dostępu w sytuacjach awaryjnych, mogą wybrać commity z odpowiednich gałęzi i włączyć je do własnych kompilacji.

Tabela 1. Wybrane funkcje AOSP dotyczące pomocy awaryjnej

Oddział Zatwierdzenia
główny e0c3c66 Dodano funkcję pomocy w sytuacji awaryjnej
42a4338 Dodano tłumaczenia dla ciągu znaków dotyczących działania w sytuacji alarmowej
4df8d64 Rozwiązano problem z wyświetlaniem funkcji pomocy w sytuacji alarmowej na tabletach
nougat-dev e6680d9 Dodano funkcję Emergency Affordance
95e1865 Dodano tłumaczenia dla ciągu znaków dotyczących działania w sytuacji alarmowej
a70bb89 Naprawiono problem z wyświetlaniem funkcji Emergency Affordance na tabletach
marshmallow-dev cd22634 Dodano funkcję Emergency Affordance
13f51c6 Dodano tłumaczenia dla ciągu znaków dotyczących działania w sytuacji alarmowej
6531666 Rozwiązano problem z wyświetlaniem funkcji Emergency Affordance na tabletach
lollipop-mr1-dev 5fbc86b Dodano funkcję Emergency Affordance
1b60879 Dodano tłumaczenia dla ciągu znaków akcji awaryjnej
d74366f Rozwiązano problem z wyświetlaniem funkcji Emergency Affordance na tabletach

Implementacja

Funkcja pomocy w sytuacji awaryjnej nie wprowadza żadnych zmian w interfejsach API udostępnianych przez pakiet SDK Androida. Po włączeniu i aktywowaniu funkcja ta udostępnia 2 wyzwalacze, które mogą zainicjować połączenie alarmowe na numer 112, który jest jedynym numerem alarmowym w Indiach i jest wymagany przez indyjskie przepisy DoT.

Połączenie alarmowe jest inicjowane w jeden z tych sposobów:

naciśnięcie i przytrzymanie przycisku WYPADEK AWARYJNY
na ekranie blokady;
kliknięcie opcji Alarm 
w menu globalnych działań.
przycisk alarmowy

Rysunek 1. Przycisk ALARM na ekranie blokady.

opcja awaryjnego

Rysunek 2. Działanie alarmowe w menu globalnych czynności (otwarte przez długie naciśnięcie przycisku zasilania).

Ta funkcja wprowadza te komponenty wewnętrzne:

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

EmergencyAffordanceManager

Interfejs EmergencyAffordanceManager udostępnia wewnętrzny interfejs API do korzystania z funkcji EmergencyAffordance. Zawiera ona metody inicjowania połączeń alarmowych oraz wykonywania zapytań w czasie działania, jeśli funkcja ma być włączona.

  • void performEmergencyCall(). Rozpoczyna połączenie alarmowe.
  • boolean needsEmergencyAffordance(). Określa, czy funkcja powinna być aktywna.

Funkcję można trwale wyłączyć w czasie kompilacji, zmieniając stałą EmergencyAffordanceManager.ENABLED na false. W efekcie funkcja needsEmergencyAffordance() zawsze zwraca wartość „fałsz” i nie uruchamia funkcji EmergencyAffordanceService.

EmergencyAffordanceService

EmergencyAffordanceService to usługa systemowa, która monitoruje kod kraju komórkowego (MCC) wszystkich wykrytych sieci komórkowych oraz kod MCC zainstalowanych kart SIM. Jeśli dowolna z włożonych kart SIM lub wykryte sieci komórkowe mają kod MCC odpowiadający jednemu z kodów MCC Indii (404 lub 405), funkcja jest włączona. Oznacza to, że tę funkcję można włączyć w Indiach, nawet jeśli nie ma karty SIM. Zakładamy, że sieć komórkowa zezwala na rejestrację połączeń alarmowych nawet bez zainstalowanej karty SIM. Ta funkcja pozostaje włączona, dopóki nie zostanie zainstalowana karta SIM z innego kraju niż Indie i żadna z wykrytych sieci nie będzie miała dopasowanego kodu MCC.

Te zasoby i ustawienia wpływają na działanie funkcji Emergency Affordance. Jeśli typ konfiguracji to:

  • Zasób – wewnętrzny zasób zdefiniowany w pliku frameworks/base/core/res/res/values/config.xml.
  • Ustawienie – ustawienie zapisane w ustawieniach dostawcy systemu.

Tabela 2. Ustawienia wpływające na działanie funkcji pomocy w sytuacji alarmowej

Typ konfiguracji Nazwa Opis
Zasób config_emergency_call_number Numer telefonu, który jest wybierany automatycznie po zainicjowaniu połączenia alarmowego.
Typ: ciąg znaków
Domyślnie: 112
Zasób config_emergency_mcc_codes Tablica liczb całkowitych z listą kont MCK, na których dana funkcja ma być aktywna.
Typ: tablica liczb całkowitych
Domyślnie: {404,405}
Ustawienie emergency_affordance_number Zastąpienie globalnego ustawienia numerem, pod który ma być wykonane połączenie w ramach interfejsu awaryjnego. Ma to wpływ tylko na obrazy kompilacji umożliwiające debugowanie (czyli typ kompilacji to userdebug lub eng). Jest to przeznaczone tylko do testowania.
Typ: ciąg znaków
Domyślna wartość: nie ustawiona
Ustawienie force_emergency_affordance Ustawienie globalne określające, czy funkcja Emergency Affordance powinna być wyświetlana niezależnie od stanu urządzenia. Jest to przeznaczone tylko do testowania.
Typ: wartość logiczna (1 lub 0)
Domyślnie: nie ustawione –> 0

Włączanie połączeń alarmowych na numer 112

Funkcja pomocy w sytuacji alarmowej łączy połączenie za pomocą wybierania numeru alarmowego, aby można było nawiązać połączenie, gdy aktywny jest ekran blokady. Dialer alarmowy łączy połączenia tylko z listą numerów udostępnionych przez interfejs RIL (Radio Interface Layer) za pomocą właściwości systemowej:

  • ril.ecclist, gdy nie ma zainstalowanej karty SIM.
  • ril.ecclistSimSlotNumber, gdy włożona jest karta SIM, a SimSlotNumber to identyfikator slotu domyślnego subskrybenta.

Producenci urządzeń korzystający z funkcji pomocy w sytuacji alarmowej muszą zadbać o to, aby na urządzeniach w Indiach zawsze był włączony numer alarmowy 112 w interfejsie RIL.

Weryfikacja

Podczas testowania na kompilacji z możliwością debugowania numer, na który jest wykonywane połączenie, można zmienić za pomocą tego polecenia:

adb shell settings put global emergency_affordance_number NUMBER_TO_CALL

To ustawienie można ustawić w zwykłej wersji użytkownika, ale jest ono ignorowane. Aby połączyć rozmowę, numer musi znajdować się na liście numerów alarmowych podanych przez RIL. Można to tymczasowo ustawić, wykonując to polecenie w powłoce root na urządzeniu z userdebug:

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

Poniższe polecenie może też służyć do wymuszenia włączenia funkcji pomocy w sytuacji awaryjnej nawet wtedy, gdy nie wykryto indyjskiej sieci komórkowej lub nie włożono indyjskiej karty SIM.

adb shell settings put global force_emergency_affordance 1

Zalecamy przetestowanie co najmniej tych scenariuszy:

  • Po aktywacji długie naciśnięcie przycisku EMERGENCY na ekranie blokady (rysunek 1) inicjuje połączenie z podanym numerem alarmowym.
  • Po włączeniu w menu globalnym akcji pojawi się opcja Alarm. Po jej kliknięciu zostanie nawiązane połączenie z numerem alarmowym.
  • Funkcja nie jest aktywowana, jeśli nie wykryto sieci komórkowej w Indiach, a w urządzeniu jest zainstalowana karta SIM innego operatora.
  • Ta funkcja jest włączona na urządzeniu, gdy w nim jest zainstalowana indyjska karta SIM, niezależnie od wykrytych sieci komórkowych.
  • Funkcja jest włączona na urządzeniu, jeśli jest dostępne indyjskie połączenie komórkowe, niezależnie od zainstalowanych kart SIM.

Jeśli urządzenie obsługuje kilka kart SIM, należy przeprowadzić testy, aby sprawdzić, czy wykrywanie MCC karty SIM działa prawidłowo w każdym gnieździe SIM. Funkcja Emergency Affordance nie jest regulowana przez zgodność z Androidem, więc nie ma dla niej testów Compatibility Test Suite (CTS).

Najczęstsze pytania

Pytanie: Numer alarmowy 112 nie został jeszcze uruchomiony w Indiach. Czy nadal warto z niego korzystać?

112 to numer używany w Indiach jako centrum powiadamiania ratunkowego (PSAP) zgodnie z definicją w ramach zintegrowanych systemów komunikacji i reagowania w sytuacji zagrożenia (IECRS). Do czasu uruchomienia PSAP wszystkie połączenia na numer 112 są przekierowywane na istniejący numer alarmowy 100 (chociaż jest to odpowiedzialność operatora, a nie Androida).

Pytanie: A co z innymi uruchamianiem, takim jak trzykrotne naciśnięcie przycisku zasilania?

Producenci urządzeń mogą stosować dodatkowe reguły. Jednak chociaż indyjska DoT zatwierdza trzykrotne naciśnięcie przycisku zasilania, to nie jest ono obsługiwane w implementacji referencyjnej AOSP, ponieważ niektóre popularne aplikacje (np. Aparat) używają gestów przycisku zasilania, które obejmują wielokrotne naciśnięcie przycisku zasilania. Takie aplikacje mogą zakłócać działanie aplikacji do wybierania numerów alarmowych lub użytkownik może przypadkowo aktywować przycisk alarmowy podczas próby wywołania działań w tych aplikacjach.