Moduł CellBroadcast zmniejsza powtarzalność działań producentów OEM (co z kolei ogranicza fragmentację ekosystemu Androida i zapewnia użytkownikom spójne działanie) oraz pomaga usprawnić testowanie i certyfikację przez operatorów pod kątem wymagań związanych z CellBroadcast (ponieważ producenci OEM nie mogą modyfikować kodu). Ten moduł można aktualizować, co oznacza, że może otrzymywać aktualizacje funkcji poza normalnym cyklem wydawniczym Androida.
Format pakietu
Moduł CellBroadcast składa się z tych usług i aplikacji:
Usługa CellBroadcastService obsługuje dekodowanie SMS-ów z komunikatów z sieci komórkowej, geofencing dla alertów bezprzewodowych (WEA) w wersji 3.0, sprawdzanie duplikatów wiadomości i przesyłanie wiadomości do aplikacji. Jest to usługa przesyłania wiadomości do wielu odbiorców w określonym obszarze geograficznym, która umożliwia dostarczanie wiadomości do wielu użytkowników telefonów komórkowych w wyznaczonym obszarze w tym samym czasie. Usługa ta jest zdefiniowana przez komitet ETSI GSM, 3GPP i stanowi część standardów telekomunikacyjnych.
Aplikacja CellBroadcastReceiver jest domyślną aplikacją systemową, która obsługuje alerty alarmowe i inne (np. alerty o zaginięciu dziecka czy alerty prezydenckie) oraz wyświetla informacje użytkownikom na podstawie przepisów operatora i regionalnych.
Przepływ komunikatów z sieci komórkowej
Na ilustracji poniżej przedstawiono przepływ wiadomości CellBroadcast.
Rysunek 1. Przepływ wiadomości CellBroadcastReceiver
Warstwa interfejsu radiowego (RIL) powiadamia
InBoundSMSHandler
o SMS-ie typu CDMA/GSM CellBroadcast.Platforma przekazuje SMS-a z komunikatem z sieci komórkowej do modułu CBS, aby go przeanalizować i przetworzyć.
Po przetworzeniu wiadomości usługa CellBroadcastService przekazuje intencję do domyślnej systemowej aplikacji CellBroadcastReceiver.
Aplikacja CellBroadcastReceiver wyświetla wiadomość użytkownikowi.
Format modułu
Usługa CellBroadcastService i aplikacja CellBroadcastReceiver są zawarte w jednym 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 platformy do packages/modules/CellBroadcastService
.
Zależności modułów
Moduł CellBroadcast współdziała z platformą, korzystając tylko ze stabilnych interfejsów API@SystemApi
(bez interfejsów API@hide
), i jest zależny 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 na zasoby środowiska wykonawczego.
Konfiguracja uprawnień
Moduł CellBroadcast jest podpisany podpisem Google zamiast podpisem platformy, co oznacza, że traci dostęp do uprawnień związanych z podpisem.
Zamiast tego Android 11 definiuje nowe uprawnienie podpisu com.android.cellbroadcastservice.FULL_ACCESS_CELL_BROADCAST_HISTORY
w module CellBroadcast. Tylko pakiety w 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 usłudze CellBroadcastService.
Platforma przyznaje domyślnej systemowej aplikacji do obsługi SMS-ów uprawnienie android.permission.READ_CELL_BROADCASTS
w czasie działania do uzyskiwania dostępu do historii alertów alarmowych.
Stosowanie modułu CellBroadcast
W tej sekcji opisujemy, jak zintegrować moduł CellBroadcast.
Integracja z Ustawieniami
Możesz zdecydować, gdzie zintegrować ustawienia CellBroadcast w aplikacji Ustawienia (użytkownicy końcowi mają dostęp do strony ustawień CellBroadcast, wybierając Ustawienia > Aplikacje i powiadomienia > Zaawansowane > Alerty o zagrożeniu). Aby uruchomić aplikację CellBroadcastReceiver z aplikacji Ustawienia, zmień te ustawienia konfiguracji, używając 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
Możesz zintegrować link do aplikacji z komunikatorami, aby otwierać historię wiadomości CellBroadcast. W aplikacji Wiadomości na Androida ta funkcja została zintegrowana z sekcją Ustawienia > Zaawansowane > Alerty o zagrożeniu. Aby zintegrować link we własnej aplikacji do przesyłania wiadomości, zdefiniuj ścieżkę w tej aplikacji i skonfiguruj nazwę komponentu 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 poniższą konfigurację za pomocą nakładki zasobu w czasie działania.
<item type="bool" name="enable_write_alerts_to_sms_inbox" />
Przyznawanie uprawnień nie wchodzi w zakres modułu CellBroadcast, dlatego musisz przyznać modułowi CellBroadcast uprawnienie AppOpsManager.OP_WRITE_SMS
, aby zapewnić kompleksową obsługę. Wzorcową implementację AOSP znajdziesz w tym SmsApplication.java
patchu.
Uruchom aplikację CellBroadcastReceiver
Aplikacja CellBroadcastReceiver ma te punkty uruchamiania.
Menu aplikacji Ustawienia.
Aplikacja (w tym aplikacje innych firm), np. aplikacja do obsługi wiadomości, która zawiera link do historii wiadomości rozgłaszanych w sieci komórkowej.
(Opcjonalnie) Ikona uruchamiania z ekranu głównego Androida dodana przez producenta OEM. Więcej informacji znajdziesz w sekcji Dodawanie ikony uruchamiania.
Ustawienia aplikacji CellBroadcastReceiver
Poniższe zrzuty ekranu przedstawiają menu ustawień aplikacji CellBroadcastReceiver.
Rysunek 2. Menu ustawień aplikacji CellBroadcastReceiver
Rysunek 3. Ekran historii alertów o zagrożeniu
Dodawanie ikon uruchamiania
Możesz włączyć dostęp do historii wiadomości CellBroadcast z poziomu programu uruchamiającego aplikacje i za pomocą własnych ikon uruchamiania.
Aby włączyć dostęp do historii wiadomości z poziomu selektora aplikacji, zastąp poniższą konfigurację za pomocą nakładki RRO.
<item type="bool" name="show_message_history_in_launcher" />
Aby zastąpić domyślną ikonę AOSP, zastąp tę konfigurację za pomocą RRO.
<!-- Customize launcher icon for cellbroadcast history --> <item type="mipmap" name="ic_launcher_cell_broadcast" />
Włączanie tajnego kodu CMAS
Aby włączyć tajny kod CMAS, *#*#CMAS#*#* (*#*#2627#*#* na klawiaturze), aplikacja do wybierania numerów musi nasłuchiwać specjalnego kodu w formacie *#*#code#*#* i obsługiwać go za pomocą metody publicznej sendDialerSpecialCode
.
Wymagania dotyczące informacji o obszarze: kanał 50
Kanał 50 to specjalny kanał, na którym operatorzy mogą nadawać informacje związane z danym obszarem (z wyjątkiem MTN w RPA). W przypadku tego kanału wiadomości rozgłoszeniowe nie powodują wyświetlania okna ani powiadomienia. Zamiast tego komunikaty rozgłoszeniowe pojawiają się w menu Ustawienia w sekcji Stan karty SIM lub na pasku stanu (np. wyświetlając kod pocztowy).
Implementacja usługi CellBroadcastService na Androidzie obsługuje te interfejsy API w usłudze transmisji komórkowej, aby aplikacje Ustawienia i SysUI mogły uzyskiwać informacje o kanale transmisji 50. Aby to zrobić:
Zarejestruj transmisję
android.telephony.action.AREA_INFO_UPDATED
i zastąp nazwę pakietu odbiorcyconfig_area_info_receiver_packages
za pomocą RRO.Połącz z
CellBroadcastService.CELL_BROADCAST_SERVICE_INTERFACE
.
Ponieważ aplikacje Ustawienia i SysUI nie wchodzą w zakres modułu CellBroadcast, musisz wdrożyć zmiany w aplikacji SystemUI lub Ustawienia, aby zapewnić kompleksową obsługę. Implementację referencyjną znajdziesz w aplikacji Ustawienia usługi CellBroadcastService.
Dostosowywanie
Nie możesz bezpośrednio modyfikować kodu źródłowego modułu CellBroadcast, ale możesz używać nakładek zasobów w czasie działania (RRO), aby włączać (lub wyłączać) parametry (możesz na przykład dostosować kolor powiadomień i wymiary okien). Aby zastąpić domyślne wartości parametrów używanych w module CellBroadcast, zmień nazwę pakietu docelowego 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 ciągów interfejsu lub tłumaczenia nie spełniają Twoich oczekiwań, możesz zastąpić zasoby tłumaczenia za pomocą RRO lub współpracować z zespołem tłumaczy Google, aby przesłać tłumaczenia ciągów do modułu CellBroadcast. Jeśli zastąpisz zasoby tłumaczenia, Google musi udostępnić te ciągi znaków w overlayable.xml
, aby umożliwić ich zastąpienie. Jeśli potrzebujesz więcej konfiguracji do dostosowania interfejsu, skontaktuj się z grupą pomocy CellBroadcast.
Przenieś dane
Android 11 zawiera starszą aplikację CellBroadcast, która jest mechanizmem zachowywania i migrowania danych aplikacji (w tym ustawień użytkownika i historii alertów awaryjnych) na urządzeniach, które są aktualizowane do modułu CellBroadcast. Implementacje Androida, które korzystają z modułu CellBroadcast, powinny zawierać w kompilacji starszą aplikację CellBroadcast na potrzeby migracji danych. Jeśli Twoja implementacja korzysta z niestandardowego rozwiązania dotyczącego transmisji komórkowej, zdefiniuj pakiet APK CellBroadcastContentProvider, aby zachować dane (w kolejnej wersji możesz bezpiecznie usunąć starszy pakiet APK transmisji komórkowej).
Na urządzeniach, które zostały zaktualizowane do korzystania z modułu CellBroadcast, moduł pobiera dane z aplikacji AOSP LegacyCellBroadcastApp lub z pliku APK CellBroadcastContentProvider zdefiniowanego przez producenta OEM za pomocą dobrze zdefiniowanego autorytetu cellbroadcast-legacy
.
Używanie zdefiniowanego przez producenta OEM pakietu APK CellBroadcastContentProvider
Podczas definiowania pliku APK CellBroadcastContentProvider musi on być zgodny z tymi specyfikacjami.
Plik APK jest bezgłowym plikiem APK, który udostępnia tylko zawartość swojej bazy danych i
SharedPreferences
za pomocą obiektuContentProvider
z uprawnieniamicellbroadcast-legacy
i nie jest dostępny dla aplikacji innych firm.Plik APK jest opracowywany i stanowi własność producenta OEM, który może nadal hostować swój ukryty schemat interfejsu API.
Aby przeprowadzić migrację SharedPreferences
do modułu CellBroadcast, plik APK CellBroadcastContentProvider musi obsługiwać metodę ContentProvider.call
) z tymi parametrami:
- Decyzyjność:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
- Metoda:
@SystemAPI CellBroadcast.CALL_METHOD_GET_PREFERENCE
Argument:
@SystemAPI CellBroadcast.Preference
To lista obsługiwanych kluczy ustawień udostępnionych modułu 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:
- Decyzyjność:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
Kolumny zapytania zawierają listę obsługiwanych właściwości wiadomości w module CellBroadcast. Pobiera dane (z bazy danych) dla metodyContentProvider.query
.
Więcej informacji o implementacji referencyjnej CellBroadcastContentProvider,
znajdziesz w LegacyCellBroadcastContentProvider
.
Testowanie
Pakiet testów zgodności Androida (CTS) weryfikuje działanie interfejsów API systemu zależnych od aplikacji. Możesz też uruchomić moduł CellBroadcast
unit tests/testappsp
.
Jeśli producent OEM włączył tajny kod CMAS na urządzeniu, może ono obsługiwać tryb debugowania z tymi funkcjami:
Alerty testowe są zgrupowane w sekcji Inne alerty i mają przełącznik włączania/wyłączania.
Historia obejmuje wszystkie wiadomości, które zostały odebrane, ale nie wyświetlone, np. zduplikowane wiadomości lub wiadomości w innym języku.
Wiadomości wyświetlają wszystkie dostępne parametry, w tym numer seryjny, identyfikator wiadomości i datę ważności.
Aby włączyć tryb debugowania, wpisz na klawiaturze numer *#*#CMAS#*#*.
Kontakt
Jeśli masz pytania lub chcesz uzyskać więcej informacji o module CellBroadcast, skontaktuj się z grupą pomocy CellBroadcast.