Wdrażanie blokowania numerów telefonów

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 jako są oczekiwane lub niezadowalające z powodu braku odpowiednich interfejsów API. do blokowania połączeń i wiadomości.

Niektórzy producenci od razu wysyłają własne rozwiązania blokujące, Jeśli użytkownik zmieni urządzenie, może całkowicie utracić listę zablokowanych z powodu braku i interoperacyjności. Nawet jeśli użytkownicy korzystają z aplikacji do wybierania numerów, klienty komunikacyjne, które oferują takie funkcje, prawdopodobnie będą musieli Wykonaj działanie blokujące w każdej aplikacji, by blokada zadziałała w obu tych aplikacjach. dzwonienie i pisanie SMS-ów.

Funkcje

W Androidzie 7.0 wprowadziliśmy materiały BlockedNumberProvider usługodawcy, który przechowuje listę numerów telefonów podanych przez użytkownika, nie powinien kontaktować się z nimi za pomocą połączeń telefonicznych (połączenia telefonicznego, SMS-ów, MMS-ów). będzie uwzględniać numery z listy zablokowanych, ograniczając SMS-ów z tych numerów. Android 7.0 wyświetla listę zablokowanych numerów oraz umożliwia dodawanie i usuwanie numerów.

Funkcja blokowania numerów włącza też system i odpowiednie aplikacje na z platformą do współpracy, aby chronić użytkowników i upraszczać z myślą o użytkownikach. domyślny telefon, domyślny klient do obsługi wiadomości, aplikacja z uprawnieniami UICC, i aplikacje o tym samym podpisie co system mogą bezpośrednio odczytywać i zapisywać na liście zablokowanych. Zablokowane numery są przechowywane w systemie, niezależnie od tego, z jakich aplikacji do wybierania numerów lub wiadomości korzysta użytkownik, numer pozostaje bez zmian, Użytkownik został zablokowany. Listę zablokowanych numerów można przywrócić na każdym nowym urządzeniu, bez względu na producenta.

  • Użytkownik ma zagwarantowaną gotowość do korzystania z funkcji blokowania. i nie stracą listy zablokowanych po zmianie aplikacji lub zakupie nowego telefonu. Wszystkie odpowiednie aplikacje w systemie mogą udostępniać tę samą listę, aby zapewnić użytkownikowi i ułatwić korzystanie z internetu.
  • Deweloperzy aplikacji nie muszą opracowywać własnych sposobów zarządzania listą blokowania ani połączeń i wiadomości. Mogą po prostu użyć i funkcji udostępnianej przez platformę.
  • Aplikacje telefonu i komunikatory wybrane przez użytkownika jako domyślne mogą do odczytu i zapisu w usłudze. Inne aplikacje mogą uruchomić zarządzanie listą zablokowanych interfejsu za pomocą funkcji createManageBlockedNumbersIntent()
  • OEM może stosować funkcję blokowania za pomocą funkcji udostępnianej przez platformę gotowe usługi. OEM może mieć pewność, że gdy użytkownik przejdzie od innego producenta OEM na urządzeniach, na których proces rejestracji jest wygodniejszy, ponieważ lista blokad również mogą zostać przeniesione.
  • Jeśli operator ma własną aplikację do obsługi telefonu lub komunikatora, może ponownie korzystać z platformy. funkcja umożliwiająca użytkownikowi tworzenie listy blokad. Mogą mieć pewność, że lista zablokowanych użytkowników będzie dostępna na nowym urządzeniu. Wszystkie aplikacje z uprawnieniami operatora mogą odczytywać listę blokad, więc jeśli chce zaoferować użytkownikom jeszcze skuteczniejsze blokowanie, na podstawie listy blokad, jest to teraz możliwe dzięki tej funkcji.

Przepływ danych

blokowy przepływ danych dotyczących numerów

Rysunek 1. Blokuj przepływ danych numerów telefonów

Przykłady i źródło

Oto przykłady połączeń z 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);

Implementacja

Są to zadania ogólne, które należy wykonać, aby umieścić funkcję do użycia:

  • OEM wdraża na swoich urządzeniach funkcje ograniczania połączeń lub wiadomości za pomocą: BlockedNumberProvider
  • Jeśli operator ma aplikację Telefon lub komunikator, wdróż połączenia/wiadomości funkcje ograniczeń przy użyciu funkcji BlockedNumberProvider
  • Dostawcy zewnętrznych usług telefonicznych i komunikatorów BlockedNumberProvider ze względu na funkcje blokowania

Zalecenia dla producentów OEM

jeśli urządzenie nigdy nie było wysyłane w ramach dodatkowego połączenia lub wiadomości. funkcji ograniczeń, skorzystaj z funkcji blokowania liczb dostępnej na platformie Android Open Source Project (AOSP) na wszystkich takich urządzeniach. Zalecamy, aby rozsądny wpis obsługiwane są punkty do zablokowania, np. zablokowanie numeru bezpośrednio w trakcie połączenia lub w wątku wiadomości.

Jeśli urządzenie było wcześniej wyposażone w funkcje ograniczeń połączeń/wiadomości, Dostosować funkcje tak, aby zablokowane numery telefonów o ściśle dopasowanych parametrach są przechowywane w BlockedNumberProvider,, a zachowanie dostawcy spełniają wymagania dotyczące tej funkcji opisane dokument definicji zgodności z Androidem (Android Compatibility Definition Document, CDD).

Wszelkie inne zaawansowane funkcje można wdrożyć za pomocą niestandardowych dostawców i niestandardowego interfejsu użytkownika / środków kontroli, o ile są spełnione wymagania CDD dotyczące Blokowanie ściśle dopasowanych numerów telefonów. Zalecamy, aby te pozostałe funkcje być oznaczone jako funkcje zaawansowane, aby uniknąć niejasności funkcji blokowania numerów.

Interfejsy API

Używane są następujące interfejsy API:

  • TelecomManager API
    • Intent createManageBlockedNumbersIntent()
  • Carrier Config
    • KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
  • Więcej informacji: BlockedNumberContract
    • Interfejsy API udostępnione przez BlockedNumberContract
    • boolean isBlocked(Context context, String phoneNumber)
    • int unblock(Context context, String phoneNumber)
    • boolean canCurrentUserBlockNumbers(Context context)

Interfejs użytkownika

Interfejs BlockedNumbersActivity.java udostępniany w AOSP może służyć do: Twórcy implementacji na urządzeniach mogą też wdrażać własną wersję interfejsu użytkownika, spełnia powiązane wymagania CDD.

Do tworzenia i przywracania kopii zapasowych może być potrzebna aplikacja na komputer partnera w celu wdrożenia przywrócenia listy blokad za pomocą funkcji BlockedNumberProvider Zobacz ilustracje poniżej dla zablokowanych interfejsu liczbowego w AOSP.

interfejs użytkownika blokowania numerów

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

Elementem 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