Moduł CellBroadcast zmniejsza konieczność powtarzania czynności przez producentów urządzeń (co z kolei ogranicza fragmentaryzację w ekosystemie Androida i zapewnia spójne działanie dla użytkowników) oraz ułatwia testowanie i certyfikowanie przez operatorów w zakresie wymagań związanych z CellBroadcast (ponieważ producentów urządzeń nie można modyfikować). Ten moduł można aktualizować, co oznacza, że może on otrzymywać aktualizacje funkcjonalności poza normalnym cyklem wydawania aktualizacji Androida.
Format pakietu
Moduł CellBroadcast składa się z tych usług i aplikacji.
Usługa CellBroadcastService obsługuje dekodowanie SMS-ów z usługi CellBroadcast, geofencing dla bezprzewodowego alarmu o stanie wyjątkowym (WEA) 3.0, sprawdzanie duplikatów wiadomości oraz wysyłanie wiadomości do aplikacji. Jest to usługa przesyłania wiadomości w ramach modelu jeden-do-wielu z geograficznym ograniczeniem i geofencingiem, która umożliwia jednoczesne wysyłanie wiadomości do wielu użytkowników telefonów komórkowych w określonym obszarze. Usługa jest zdefiniowana przez komitet GSM ETSI, 3GPP i jest częścią standardów telekomunikacyjnych.
Aplikacja CellBroadcastReceiver to domyślna aplikacja systemowa, która obsługuje alerty awaryjne i nieawaryjne (takie jak alerty Amber i prezydenta) oraz przedstawia informacje użytkownikom na podstawie regulaminów operatora i przepisów regionalnych.
Proces przesyłania komunikatów z sieci komórkowej
Na rysunku poniżej widać przepływ wiadomości CellBroadcast.
Rysunek 1. Przepływ wiadomości w CellBroadcastReceiver
Warstwę interfejsu radiowego (RIL)
InBoundSMSHandler
informuje o SMS-ie z CellBroadcast w sieci CDMA/GSM.Ramka przekazuje SMS-a z komórki do modułu CBS w celu zanalizowania i przetworzenia przychodzącej wiadomości.
Po przetworzeniu wiadomości usługa CellBroadcastService przekazuje intencję do domyślnej aplikacji CellBroadcastReceiver.
Aplikacja CellBroadcastReceiver wyświetla wiadomość użytkownikowi.
Format modułu
Usługa CellBroadcastService i aplikacja CellBroadcastReceiver są zawarte w pojedynczym pliku APEX (com.android.cellbroadcast
), który jest dostępny na urządzeniach z Androidem 11 lub nowszym. Moduł zawiera kod w package/app/CellBroadcastReceiver
i przenosi istniejące klasy frameworka do packages/modules/CellBroadcastService
.
Zależności modułu
Moduł CellBroadcast współpracuje z ramówką tylko za pomocą stabilnego interfejsu @SystemApi
(bez interfejsów @hide
) i uzależnia się od tych bibliotek statycznych.
Androidx.legacy_legacy-support-v13
Androidx.recyclerview_recyclerview
Androidx.preference_preference
androidx.legacy_legacy-preference-v14
androidx.appcompat_appcompat
Konfigurację możesz dostosować za pomocą nakładek zasobów w czasie wykonywania (RRO).
Konfiguracja uprawnień
Moduł CellBroadcast jest podpisany podpisem Google, a nie podpisem platformy, co oznacza, że traci dostęp do uprawnień podpisu.
Zamiast tego Android 11 definiuje nowe uprawnienie do podpisywania com.android.cellbroadcastservice.FULL_ACCESS_CELL_BROADCAST_HISTORY
w ramach modułu CellBroadcast; tylko pakiety w tym module mogą uzyskać to uprawnienie, ponieważ są podpisane tym samym kluczem. To uprawnienie umożliwia aplikacji CellBroadcastReceiver pełny dostęp do bazy danych w CellBroadcastService.
Platforma przyznaje domyślnej aplikacji do obsługi SMS-ów uprawnienia android.permission.READ_CELL_BROADCASTS
dotyczące dostępu do historii alertów o stanie zagrożenia.
Integrowanie modułu CellBroadcast
Z tej sekcji dowiesz się, jak zintegrować moduł CellBroadcast.
Integracja z Ustawieniami
W aplikacji Ustawienia możesz określić, gdzie zintegrować ustawienia CellBroadcast (użytkownicy końcowi mogą otworzyć stronę ustawień CellBroadcast, klikając Ustawienia > Aplikacje i powiadomienia > Zaawansowane > Alert o zagrożeniu). Aby uruchomić aplikację CellBroadcastReceiver z aplikacji Ustawienia, zmień te ustawienia za pomocą nazwy pakietu com.android.cellbroadcastreceiver
.
<!-- Cell broacast receiver package name [DO NOT TRANSLATE] -->
<string name="cell_broadcast_receiver_package">
com.android.cellbroadcastreceiver</string>
Integracja z aplikacjami do obsługi wiadomości
Aby otworzyć historię wiadomości z usługi CellBroadcast, możesz zintegrować link do aplikacji z komunikatorami. W aplikacji Wiadomości na Androidzie ta funkcja została zintegrowana z ustawieniami Ustawienia > Zaawansowane > Alert o zagrożeniu. Aby zintegrować link w własnej aplikacji do obsługi wiadomości, określ ścieżkę w tej aplikacji i skonfiguruj nazwę komponentu dla modułu CellBroadcast jako com.android.cellbroadcastreceiver/com.android.cellbroadcastreceiver.CellBroadcastListActivity
.
Integracja ze skrzynką odbiorczą SMS-ów
Możesz włączyć wyświetlanie wiadomości CellBroadcast w domyślnej aplikacji do obsługi wiadomości, zastępując tę konfigurację za pomocą nakładki zasobów w czasie wykonywania.
<item type="bool" name="enable_write_alerts_to_sms_inbox" />
Przyznawanie uprawnień wykracza poza zakres modułu CellBroadcast, dlatego musisz przyznać uprawnienia AppOpsManager.OP_WRITE_SMS
modułowi CellBroadcast, aby zapewnić kompleksową obsługę. Implementację referencyjną AOSP znajdziesz w tej SmsApplication.java
aktualizacji.
Uruchom aplikację CellBroadcastReceiver.
Aplikacja CellBroadcastReceiver ma te punkty uruchamiania:
Menu aplikacji Ustawienia.
Aplikacja (w tym aplikacja innej firmy), np. aplikacja do obsługi wiadomości, która zawiera link do historii wiadomości z CellBroadcast.
(Opcjonalnie) Ikona uruchamiania z ekranu głównego Androida dodana przez producenta OEM. Więcej informacji znajdziesz w artykule Dodawanie ikony uruchamiania.
Ustawienia aplikacji CellBroadcastReceiver
Na poniższych zrzutach ekranu widać menu ustawień aplikacji CellBroadcastReceiver.
Rysunek 2. Menu ustawień aplikacji CellBroadcastReceiver
Rysunek 3. Ekran z historią alertów o zagrożeniu
Dodawanie ikon uruchamiania
Możesz włączyć dostęp do historii wiadomości CellBroadcast w wyszukiwarce aplikacji oraz za pomocą własnych ikon uruchamiania.
Aby umożliwić dostęp do historii wiadomości z poziomu menu aplikacji, za pomocą RRO zastąpij następującą konfigurację.
<item type="bool" name="show_message_history_in_launcher" />
Aby zastąpić domyślną ikonę AOSP, za pomocą RRO zastąp tę konfigurację.
<!-- Customize launcher icon for cellbroadcast history --> <item type="mipmap" name="ic_launcher_cell_broadcast" />
Włączanie kodu tajnego CMAS
Aby włączyć kod tajny CMAS, *#*#CMAS#*#* (*#*#2627#*#* na klawiaturze numerycznej), aplikacja do wybierania numerów musi nasłuchiwać specjalnego kodu w formie *#*#code#*#* i obsługiwać go za pomocą metody publicznej sendDialerSpecialCode
.
Wymagania dotyczące informacji o obszarze: kanał 50
Kanał 50 to specjalny kanał, za pomocą którego operatorzy mogą nadawać informacje dotyczące obszaru (z wyjątkiem MTN w RPA). W przypadku tego kanału wiadomości rozgłaszane nie uruchamiają okna dialogowego ani powiadomienia. Zamiast tego wiadomości z transmisji będą wyświetlane w menu Ustawienia w sekcji Stan karty SIM lub na pasku stanu (np. wyświetlanie kodu pocztowego).
Implementacja usługi CellBroadcastService na Androidzie zapewnia obsługę tych interfejsów API w usłudze transmisji komórkowej dla aplikacji Ustawienia i SysUI w celu uzyskania informacji o transmisji na kanale 50. Aby to zrobić:
Zarejestruj transmisję
android.telephony.action.AREA_INFO_UPDATED
i zastąpij nazwę pakietu odbiorcyconfig_area_info_receiver_packages
za pomocą RRO.Połącz z
CellBroadcastService.CELL_BROADCAST_SERVICE_INTERFACE
.
Aplikacje Ustawienia i SysUI wykraczają poza zakres modułu CellBroadcast, więc aby zapewnić obsługę kompleksową, musisz wdrożyć zmiany w aplikacji SystemUI lub Ustawienia. Implementację referencyjną znajdziesz w aplikacji CellBroadcastService Settings.
Dostosowywanie
Nie możesz bezpośrednio modyfikować kodu źródłowego modułu CellBroadcast, ale możesz użyć nakładek zasobów w czasie wykonywania (RRO), aby włączyć (lub wyłączyć) parametry (możesz na przykład dostosować kolor powiadomień i wymiarów w dialogach). Aby zastąpić domyślne wartości parametrów używanych w module CellBroadcast, zmień nazwę docelowego pakietu na com.android.cellbroadcastreceiver
. Ponadto:
Listę konfiguracji, które można nakładać, znajdziesz w sekcji
overlayable.xml
.Przykładową implementację znajdziesz w
RROSampleTestApp
w AOSP.
Jeśli w implementacji brakuje zasobów tłumaczenia napisów UI lub tłumaczenia nie spełniają Twoich oczekiwań, możesz zastąpić zasoby tłumaczenia za pomocą RRO lub współpracować z zespołem Google ds. tłumaczenia, aby przesłać tłumaczenia napisów do modułu CellBroadcast. Jeśli zastąpisz zasoby tłumaczenia, Google musi udostępnić te ciągi znaków w pliku overlayable.xml
, aby umożliwić ich zastąpienie. Jeśli potrzebujesz więcej konfiguracji do dostosowywania interfejsu, skontaktuj się z grupą pomocy CellBroadcast.
Przenieś dane
Android 11 zawiera starszą aplikację CellBroadcast, która jest mechanizmem służącym do zachowania i przenoszenia danych aplikacji (w tym ustawień użytkownika i historii alertów o wypadkach) na urządzeniach przechodzących na moduł CellBroadcast. Implementacje na Androida, które korzystają z modułu CellBroadcast, powinny zawierać w kompilacji starszą wersję aplikacji CellBroadcast, aby umożliwić migrację danych. Jeśli Twoja implementacja korzysta z niestandardowego rozwiązania CellBroadcast, zdefiniuj plik APK CellBroadcastContentProvider, aby zachować dane (w kolejnych wersjach możesz bezpiecznie usunąć starszy plik APK CellBroadcast).
Na urządzeniach z aktualizacją do korzystania z modułu CellBroadcast moduł pobiera dane z AOSP LegacyCellBroadcastApp lub z pliku APK CellBroadcastContentProvider zdefiniowanego przez OEM-a za pomocą dobrze zdefiniowanej cellbroadcast-legacy
autorytetu.
Używanie pliku APK CellBroadcastContentProvider zdefiniowanego przez producenta OEM
Podczas definiowania pliku APK CellBroadcastContentProvider plik ten musi być zgodny z tymi specyfikacjami.
Plik APK jest bezgłowym plikiem APK, który wyświetla tylko zawartość swojej bazy danych i
SharedPreferences
przez obiektContentProvider
z upoważnieniemcellbroadcast-legacy
. Nie jest on dostępny dla aplikacji innych firm.Plik APK jest tworzony i własnością producenta OEM, który może nadal hostować ukryty schemat interfejsu API.
Aby przenieść SharedPreferences
do modułu CellBroadcast, plik APK CellBroadcastContentProvider musi obsługiwać metodę ContentProvider.call
z tymi parametrami:
- Decyzja:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
- Metoda:
@SystemAPI CellBroadcast.CALL_METHOD_GET_PREFERENCE
Arg:
@SystemAPI CellBroadcast.Preference
Oto lista obsługiwanych wspólnych kluczy preferencji w module CellBroadcast. Dane pochodzą z
SharedPreferences
w przypadku metodyContentProvider.call
.
Aby przenieść historię wiadomości do modułu CellBroadcast, plik APK CellBroadcastContentProvider musi obsługiwać metodę ContentProvider.query
z tymi parametrami:
- Decyzja:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
. Kolumny zapytań zawierają listę obsługiwanych właściwości wiadomości dla modułu CellBroadcast. Pobiera dane (z bazy danych) do metodyContentProvider.query
.
Implementację referencyjną dla CellBroadcastContentProvider,
znajdziesz w dokumentacji LegacyCellBroadcastContentProvider
.
Testowanie
Pakiet Compatibility Test Suite (CTS) sprawdza działanie interfejsów API systemu zależnych od aplikacji. Możesz też uruchomić moduł CellBroadcastunit tests/testappsp
.
Jeśli producent OEM włączył kod tajny CMAS na urządzeniu, urządzenie może obsługiwać tryb debugowania z tymi funkcjami.
Alerty testowe są grupowane w sekcji Inne alerty i mają przełącznik włączania/wyłączania.
Historia obejmuje wszystkie otrzymane, ale niewyświetlone wiadomości, takie jak zduplikowane wiadomości lub wiadomości w innym języku.
Wiadomości zawierają wszystkie dostępne parametry, w tym numer seryjny, identyfikator wiadomości i datę wygaśnięcia.
Aby włączyć tryb debugowania, wybierz *#*#CMAS#*#* na klawiaturze.
Kontakt
Aby uzyskać więcej informacji o module CellBroadcast lub zadać pytanie na jego temat, skontaktuj się z grupą pomocy CellBroadcast.