Wdrażanie blokowanych numerów telefonów

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

przepływ danych numerów bloków

Rysunek 1. Blokuj przepływ danych o numerach telefonów

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)

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.

interfejs użytkownika numerów bloków

Rysunek 2. Interfejs użytkownika blokowania numerów telefonów

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