Telefonia to otwarty kanał komunikacji – każdy może zadzwonić lub wysłać SMS-a pod dowolny numer w dowolnym momencie. Użytkownicy Androida potrzebują więc możliwości łatwego blokowania niechcianych połączeń i SMS-ów.
Przed wersją 7.0 użytkownicy Androida musieli polegać na pobranych aplikacjach, aby ograniczać połączenia i SMS-y z niechcianych numerów telefonów. Wiele z tych aplikacji nie działa tak, jak powinno, lub nie zapewnia optymalnego działania, ponieważ nie ma odpowiednich interfejsów API do blokowania połączeń i wiadomości.
Niektórzy producenci mogą dostarczać własne rozwiązania do blokowania, ale jeśli użytkownicy zmieniają urządzenia, mogą całkowicie utracić listę zablokowanych adresów ze względu na brak interoperacyjności. Nawet jeśli użytkownicy korzystają z aplikacji do wybierania numerów i klientów wiadomości, które zapewniają taką funkcję, nadal muszą wykonać blokadę w każdej aplikacji, aby blokada zaczęła obowiązywać zarówno w przypadku połączeń, jak i wiadomości tekstowych.
Funkcje
W wersji Androida 7.0 wprowadzono usługę BlockedNumberProvider
, która przechowuje listę numerów telefonów, z których użytkownik nie chce otrzymywać połączeń ani wiadomości (SMS-ów i MMS-ów). System będzie uwzględniać numery z listy zablokowanych, ograniczając połączenia i SMS-y z tych numerów. Android 7.0 wyświetla listę zablokowanych numerów i pozwala użytkownikowi dodawać i usuwać numery.
Ponadto funkcja blokowania numerów umożliwia systemowi i odpowiednim aplikacjom na platformie współpracę w celu ochrony użytkownika i uproszczenia jego wrażeń. Domyślna aplikacja do wybierania numerów, domyślny klient wiadomości, aplikacja z przywilejami UICC oraz aplikacje z tą samą sygnaturą co system mogą bezpośrednio odczytywać i zapisywać na liście zablokowanych. Zablokowane numery są przechowywane w systemie, więc niezależnie od tego, z której aplikacji do wybierania numerów lub wysyłania wiadomości korzysta użytkownik, numery te pozostają zablokowane. Na koniec warto pamiętać, że listę zablokowanych numerów można przywrócić na dowolnym nowym urządzeniu, niezależnie od producenta.
- Użytkownik będzie mieć pewność, że funkcja blokowania będzie działać od razu po zainstalowaniu, a lista zablokowanych numerów nie zostanie utracona, gdy zmieni aplikację lub kupi nowy telefon. Wszystkie odpowiednie aplikacje w systemie mogą udostępniać tę samą listę, aby zapewnić użytkownikowi jak największą wygodę.
- Deweloperzy aplikacji nie muszą opracowywać własnych sposobów zarządzania listą blokowania ani połączeń i wiadomości. Mogą po prostu korzystać z funkcji udostępnionej przez platformę.
- Aplikacje do wybierania numerów i komunikatory wybrane przez użytkownika jako domyślne mogą odczytywać i zapisywać dane u dostawcy. Inne aplikacje mogą otwierać interfejs zarządzania listą zablokowanych za pomocą
createManageBlockedNumbersIntent()
- Producenci OEM mogą korzystać z funkcji udostępnianych przez platformę, aby udostępniać funkcję blokowania „out-of-the-box”. Producenci OEM mogą mieć pewność, że gdy użytkownicy przenoszą się z urządzenia innego producenta, proces konfiguracji będzie łatwiejszy, ponieważ lista blokowania zostanie również przeniesiona.
- Jeśli operator ma własną aplikację do wybierania numerów lub komunikator, może ponownie użyć funkcji platformy, aby umożliwić użytkownikowi utrzymywanie listy zablokowanych numerów. Mogą mieć pewność, że lista zablokowanych użytkowników będzie dostępna na nowym urządzeniu. W końcu wszystkie aplikacje z uprawnieniami operatora mogą odczytywać listę zablokowanych adresów. Jeśli operator chce zapewnić użytkownikowi dodatkowe, bardziej skuteczne blokowanie na podstawie listy zablokowanych adresów, ta funkcja umożliwia mu to.
Przepływ danych

Rysunek 1. Blokowanie przepływu danych o numerach telefonów
Przykłady i źródło
Oto przykłady połączeń z wykorzystaniem nowej funkcji blokowania numerów:
Uruchamianie menedżera zablokowanych numerów z aplikacji
Context.startActivity(telecomManager.createManageBlockedNumbersIntent(), null);
Zapytanie o zablokowane numery
Cursor c = getContentResolver().query(BlockedNumbers.CONTENT_URI, new String[]{BlockedNumbers.COLUMN_ID, BlockedNumbers.COLUMN_ORIGINAL_NUMBER, BlockedNumbers.COLUMN_E164_NUMBER}, null, null, null);
Wpisz zablokowany numer
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
Usuwanie zablokowanego numeru
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values); getContentResolver().delete(uri, null, null);
Implementacja
Oto ogólne czynności, które należy wykonać, aby korzystać z funkcji blokowania numerów:
- Producenci OEM implementują funkcje ograniczania połączeń i wiadomości na swoich urządzeniach, korzystając z
BlockedNumberProvider
- Jeśli operator ma aplikację do połączeń lub komunikatora, wprowadź funkcje blokowania połączeń i wiadomości za pomocą
BlockedNumberProvider
- Dostawcy zewnętrznych aplikacji do wybierania numerów i komunikacji używają funkcji blokowania
BlockedNumberProvider
Zalecenia dla producentów urządzeń
Jeśli urządzenie nigdy wcześniej nie było dostarczane z dodatkowymi funkcjami ograniczania połączeń i wiadomości, na wszystkich takich urządzeniach użyj funkcji blokowania numerów w ramach Projektu Android Open Source (AOSP). Zaleca się, aby obsługiwane były rozsądne punkty wejścia do blokowania, takie jak blokowanie numeru bezpośrednio z dziennika połączeń lub z wątku wiadomości.
Jeśli urządzenie było wcześniej dostarczane z funkcjami ograniczania połączeń i wiadomości, dostosuj te funkcje tak, aby wszystkie zablokowane numery telefonu z dokładnym dopasowaniem były przechowywane w BlockedNumberProvider,
i aby zachowanie związane z usługodawcą spełniało wymagania dotyczące tej funkcji określone w dokumentacji Android Compatibility Definition Document (CDD).
Inne zaawansowane funkcje można wdrażać za pomocą niestandardowych dostawców i niestandardowych interfejsów użytkownika, o ile spełniają wymagania dotyczące blokowania numerów telefonów z dokładnym dopasowaniem. Zalecamy, aby te inne funkcje były oznaczone jako „zaawansowane”, aby uniknąć pomylenia z podstawową funkcją blokowania numerów.
Interfejsy API
Oto używane interfejsy API:
TelecomManager API
Intent createManageBlockedNumbersIntent()
Carrier Config
KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
- Zapoznaj się z artykułem
BlockedNumberContract
- Interfejsy API udostępnione przez
BlockedNumberContract
boolean isBlocked(Context context, String phoneNumber)
int unblock(Context context, String phoneNumber)
boolean canCurrentUserBlockNumbers(Context context)
- Interfejsy API udostępnione przez
Interfejs użytkownika
Interfejs użytkownika BlockedNumbersActivity.java udostępniony w AOSP może być używany w postaci domyślnej. Implementatorzy urządzeń mogą też wdrożyć własną wersję interfejsu użytkownika, o ile spełnia ona powiązane wymagania CDD.
Pamiętaj, że do przywrócenia listy blokowania za pomocą aplikacji partnera na komputerze może być potrzebna aplikacja do tworzenia kopii zapasowych i przywracania.BlockedNumberProvider
Poniżej znajdziesz obrazy interfejsu zablokowanych numerów w AOSP.

Rysunek 2. Blokowanie numerów telefonów – interfejs
Weryfikacja
Aby mieć pewność, że ich wersja funkcji działa prawidłowo, implementujący mogą przeprowadzić te testy CTS:
android.provider.cts.BlockedNumberContractTest com.android.cts.numberblocking.hostside.NumberBlockingTest android.telecom.cts.ExtendedInCallServiceTest#testIncomingCallFromBlockedNumber_IsRejected android.telephony.cts.SmsManagerTest#testSmsBlocking
Po uruchomieniu $ adb root
możesz manipulować wartością BlockedNumberProvider
za pomocą poleceń adb
. Przykład:
adb root
adb shell content query --uri content://com.android.blockednumber/blocked
adb shell content insert --uri / content://com.android.blockednumber/blocked --bind / original_number:s:'6501002000'
adb shell content delete --uri / content://com.android.blockednumber/blocked/1