Ponieważ telefonia jest tak otwartym kanałem komunikacji – każdy może zadzwonić lub wysłać SMS-a na dowolny numer w dowolnym momencie – użytkownicy Androida potrzebują możliwości łatwego blokowania niechcianych połączeń i SMS-ów.
Przed wersją N użytkownicy Androida musieli polegać na pobranych aplikacjach, aby ograniczać połączenia i SMS-y z uciążliwych numerów telefonów. Wiele z tych aplikacji albo nie działa zgodnie z oczekiwaniami, albo zapewnia wrażenia odbiegające od ideału, ponieważ nie ma odpowiednich interfejsów API do blokowania połączeń i wiadomości.
Niektórzy producenci mogą dostarczać własne rozwiązania blokujące od razu po wyjęciu z pudełka, ale jeśli użytkownicy zmienią urządzenie, mogą całkowicie utracić listę zablokowanych z powodu braku interoperacyjności. Wreszcie, nawet jeśli użytkownicy korzystają z aplikacji do wybierania numerów i klientów do przesyłania wiadomości, które zapewniają taką funkcjonalność, prawdopodobnie nadal będą musieli wykonać akcję blokowania w każdej aplikacji, aby blokada zaczęła obowiązywać zarówno w przypadku połączeń telefonicznych, jak i wysyłania SMS-ów.
Cechy
W wersji Androida 7.0 wprowadzono dostawcę treści BlockedNumberProvider
, który przechowuje listę numerów telefonów określonych przez użytkownika, z którymi użytkownik nie powinien mieć możliwości kontaktowania się za pośrednictwem komunikacji telefonicznej (połączenia, SMS-y, MMS-y). System będzie szanował numery znajdujące się na liście zablokowanych, ograniczając połączenia i SMS-y z tych numerów. Android 7.0 wyświetla listę zablokowanych numerów oraz umożliwia użytkownikowi dodawanie i usuwanie numerów.
Co więcej, funkcja blokowania numerów umożliwia współpracę systemu i odpowiednich aplikacji na platformie, aby chronić użytkownika i uprościć jego obsługę. Domyślny dialer, domyślny klient wiadomości, aplikacja z uprawnieniami UICC i aplikacje z tym samym podpisem, co system, mogą bezpośrednio odczytywać i zapisywać na liście zablokowanych. Ponieważ zablokowane numery są przechowywane w systemie, niezależnie od tego, z jakiej aplikacji do wybierania numerów lub wiadomości korzysta użytkownik, numery pozostają zablokowane. Wreszcie listę zablokowanych numerów można przywrócić na dowolnym nowym urządzeniu, niezależnie od producenta.
- Użytkownik będzie miał gwarancję, że będzie miał funkcję blokowania, która działa od razu po wyjęciu z pudełka i nie utraci listy zablokowanych po zmianie aplikacji lub zakupie nowego telefonu. Wszystkie odpowiednie aplikacje w systemie mogą współużytkować tę samą listę, aby zapewnić użytkownikowi jak najbardziej usprawnioną obsługę.
- Twórcy aplikacji nie muszą opracowywać własnego sposobu zarządzania listą zablokowanych oraz przychodzącymi połączeniami i wiadomościami. Mogą po prostu skorzystać z funkcji udostępnianej przez platformę.
- Aplikacje Dialer/Posłaniec wybrane przez użytkownika jako domyślne mogą czytać i pisać do dostawcy. Inne aplikacje mogą uruchamiać interfejs użytkownika do zarządzania listą zablokowanych za pomocą funkcji
createManageBlockedNumbersIntent()
- Producenci OEM mogą korzystać z funkcji udostępnianych przez platformę, aby dostarczać funkcję blokowania od razu po wyjęciu z pudełka. Producenci OEM mogą być pewni, że gdy użytkownicy przełączą się z urządzenia innego producenta OEM, będą mieli lepsze doświadczenie w zakresie wdrożenia, ponieważ lista zablokowanych również zostanie przeniesiona.
- Jeśli operator ma własny dialer lub komunikator, może ponownie wykorzystać funkcję platformy, aby umożliwić użytkownikowi zarządzanie listą blokowanych. Mogą być pewni, że lista zablokowanych użytkowników pozostanie z nimi nawet wtedy, gdy otrzymają nowe urządzenie. Wreszcie wszystkie aplikacje uprzywilejowane przez operatora mogą czytać listę zablokowanych, więc jeśli operator chce zapewnić użytkownikowi dodatkowe, skuteczniejsze blokowanie w oparciu o listę zablokowanych, jest to teraz możliwe dzięki tej funkcji.
Przepływ danych
Przykłady i źródło
Oto przykładowe połączenia wykorzystujące nową funkcję blokowania numerów:
Uruchom 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);
Umieść zablokowany numer
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
Usuń zablokowany numer
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values); getContentResolver().delete(uri, null, null);
Realizacja
Oto zadania wysokiego poziomu, które należy wykonać, aby można było korzystać z funkcji blokowania numerów:
- Producenci OEM wdrażają funkcje ograniczania połączeń/wiadomości na swoich urządzeniach za pomocą
BlockedNumberProvider
- Jeśli operator ma aplikację dialera lub komunikatora, zaimplementuj funkcje ograniczania połączeń/wiadomości za pomocą
BlockedNumberProvider
- Zewnętrzni dostawcy aplikacji do wybierania numerów i komunikatorów używają
BlockedNumberProvider
do swoich funkcji blokowania
Zalecenia dla producentów OEM
Jeśli urządzenie nigdy wcześniej nie było dostarczane z dodatkowymi funkcjami ograniczania połączeń/wiadomości, użyj funkcji blokowania numerów w projekcie Android Open Source Project (AOSP) na wszystkich takich urządzeniach. Zaleca się obsługę rozsądnych punktów wejścia do blokowania, takich jak blokowanie numeru bezpośrednio z rejestru połączeń lub w wątku wiadomości.
Jeśli urządzenie było wcześniej dostarczane z funkcjami ograniczania połączeń/wiadomości, dostosuj te funkcje tak, aby wszystkie zablokowane numery telefonów o ścisłym dopasowaniu były przechowywane w BlockedNumberProvider,
oraz aby zachowanie wokół dostawcy spełniało wymagania tej funkcji opisane w dokumencie dotyczącym zgodności z systemem Android Dokument definicji (CDD).
Każdą inną zaawansowaną funkcję można wdrożyć za pośrednictwem niestandardowych dostawców i niestandardowego interfejsu użytkownika/kontroli, o ile spełnione są wymagania CDD w zakresie blokowania ściśle dopasowanych numerów telefonów. Zaleca się, aby te inne funkcje były oznaczone jako funkcje „zaawansowane”, aby uniknąć pomylenia z podstawową funkcją blokowania numerów.
Pszczoła
Oto używane interfejsy API:
-
TelecomManager API
-
Intent createManageBlockedNumbersIntent()
-
-
Carrier Config
-
KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
-
- Proszę zapoznać się z
BlockedNumberContract
- Interfejsy API dostarczane przez
BlockedNumberContract
-
boolean isBlocked(Context context, String phoneNumber)
-
int unblock(Context context, String phoneNumber)
-
boolean canCurrentUserBlockNumbers(Context context)
- Interfejsy API dostarczane przez
Interfejs użytkownika
Interfejs użytkownika BlockedNumbersActivity.java dostarczony w AOSP może być używany w niezmienionej postaci. Osoby wdrażające urządzenia mogą również wdrożyć własną wersję interfejsu użytkownika, o ile spełnia ona powiązane wymagania CDD.
Należy pamiętać, że do wdrożenia przywracania listy zablokowanych za pomocą BlockedNumberProvider
może być potrzebna aplikacja komputerowa partnera do tworzenia kopii zapasowych i przywracania. Zobacz poniższe obrazy, aby zapoznać się z interfejsem zablokowanych numerów dostarczonym w AOSP.
Walidacja
Osoby wdrażające mogą upewnić się, że ich wersja funkcji działa zgodnie z zamierzeniami, uruchamiając następujące testy CTS:
android.provider.cts.BlockedNumberContractTest com.android.cts.numberblocking.hostside.NumberBlockingTest android.telecom.cts.ExtendedInCallServiceTest#testIncomingCallFromBlockedNumber_IsRejected android.telephony.cts.SmsManagerTest#testSmsBlocking
BlockedNumberProvider
można manipulować za pomocą poleceń adb
po uruchomieniu $ adb root
. Na 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