Implementierung von Sperrtelefonnummern

Da es sich bei der Telefonie um einen so offenen Kommunikationskanal handelt – jeder kann jederzeit jede beliebige Nummer anrufen oder ihr eine SMS schicken – müssen Android-Benutzer die Möglichkeit haben, unerwünschte Anrufe und SMS einfach zu blockieren.

Vor N mussten sich Android-Benutzer auf heruntergeladene Apps verlassen, um Anrufe und Textnachrichten von störenden Telefonnummern einzuschränken. Viele dieser Apps funktionieren entweder nicht wie gewünscht oder bieten kein optimales Erlebnis, da es keine geeigneten APIs zum Blockieren von Anrufen und Nachrichten gibt.

Einige Hersteller liefern möglicherweise ihre eigenen Blockierungslösungen sofort aus, aber wenn Benutzer das Gerät wechseln, kann es sein, dass sie aufgrund mangelnder Interoperabilität die Liste der blockierten Geräte vollständig verlieren. Selbst wenn Benutzer Wähl-Apps und Messaging-Clients verwenden, die solche Funktionen bereitstellen, müssen sie wahrscheinlich trotzdem die Blockierungsaktion in jeder App ausführen, damit die Blockierung sowohl für Anrufe als auch für SMS wirksam wird.

Merkmale

Mit der Android 7.0-Version wird ein BlockedNumberProvider Inhaltsanbieter eingeführt, der eine Liste von Telefonnummern speichert, die der Benutzer angegeben hat und die nicht über Telefonkommunikation (Anrufe, SMS, MMS) kontaktiert werden können. Das System respektiert die Nummern in der Sperrliste, indem es Anrufe und SMS von diesen Nummern einschränkt. Android 7.0 zeigt die Liste der blockierten Nummern an und ermöglicht dem Benutzer das Hinzufügen und Entfernen von Nummern.

Darüber hinaus ermöglicht die Nummernblockierungsfunktion dem System und den relevanten Apps auf der Plattform, zusammenzuarbeiten, um den Benutzer zu schützen und das Erlebnis zu vereinfachen. Der Standard-Dialer, der Standard-Messaging-Client, die UICC-privilegierte App und Apps mit derselben Signatur wie das System können alle direkt von der Sperrliste lesen und in sie schreiben. Da die gesperrten Nummern im System gespeichert werden, bleiben die Nummern gesperrt, unabhängig davon, welche Wähl- oder Messaging-Apps der Benutzer verwendet. Schließlich kann die Liste der gesperrten Nummern auf jedem neuen Gerät, unabhängig vom Hersteller, wiederhergestellt werden.

  • Dem Benutzer steht garantiert eine Sperrfunktion zur Verfügung, die sofort funktioniert und seine Sperrliste nicht verliert, wenn er die App wechselt oder ein neues Telefon kauft. Alle relevanten Apps im System können dieselbe Liste teilen, um dem Benutzer ein möglichst optimiertes Erlebnis zu bieten.
  • App-Entwickler müssen keine eigene Methode zum Verwalten einer Sperrliste und der eingehenden Anrufe und Nachrichten entwickeln. Sie können einfach die von der Plattform bereitgestellte Funktion verwenden.
  • Dialer-/Messenger-Apps, die vom Benutzer als Standard ausgewählt werden, können den Anbieter lesen und schreiben. Andere Apps können die Benutzeroberfläche für die Sperrlistenverwaltung mithilfe von createManageBlockedNumbersIntent() starten.
  • OEMs können die von der Plattform bereitgestellte Funktion nutzen, um eine Blockierungsfunktion sofort auszuliefern. OEMs können sicher sein, dass Benutzer, die von einem Gerät eines anderen OEM wechseln, ein besseres Onboarding-Erlebnis haben, da auch die Sperrliste übertragen wird.
  • Wenn der Netzbetreiber über eine eigene Dialer- oder Messenger-App verfügt, kann er die Plattformfunktion wiederverwenden, um dem Benutzer die Verwaltung einer Sperrliste zu ermöglichen. Sie können sicher sein, dass die Sperrliste des Benutzers auch dann erhalten bleibt, wenn er ein neues Gerät erhält. Schließlich können alle vom Netzbetreiber privilegierten Apps die Sperrliste lesen. Wenn der Netzbetreiber dem Benutzer also auf der Grundlage der Sperrliste zusätzliche, leistungsfähigere Sperren bereitstellen möchte, ist dies jetzt mit dieser Funktion möglich.

Datenfluss

Blocknummern Datenfluss

Abbildung 1. Datenfluss von Telefonnummern blockieren

Beispiele und Quelle

Hier sind Beispielanrufe mit der neuen Funktion zum Blockieren von Nummern:

Starten Sie den Manager für blockierte Nummern über die App

Context.startActivity(telecomManager.createManageBlockedNumbersIntent(), null);

Gesperrte Nummern abfragen

Cursor c = getContentResolver().query(BlockedNumbers.CONTENT_URI,
         new String[]{BlockedNumbers.COLUMN_ID,
         BlockedNumbers.COLUMN_ORIGINAL_NUMBER,
         BlockedNumbers.COLUMN_E164_NUMBER}, null, null, null);

Sperrnummer setzen

ContentValues values = new ContentValues();
values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890");
Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);

Gesperrte Nummer löschen

ContentValues values = new ContentValues();
values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890");
Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
getContentResolver().delete(uri, null, null);

Implementierung

Dies sind die allgemeinen Aufgaben, die abgeschlossen werden müssen, um die Nummernsperrfunktion nutzen zu können:

  • OEMs implementieren Funktionen zur Anruf-/Nachrichtenbeschränkung auf ihren Geräten mithilfe von BlockedNumberProvider
  • Wenn der Netzbetreiber über eine Dialer- oder Messenger-Anwendung verfügt, implementieren Sie Anruf-/Nachrichtenbeschränkungsfunktionen mithilfe von BlockedNumberProvider
  • Drittanbieter von Dialer- und Messenger-Apps verwenden BlockedNumberProvider für ihre Blockierungsfunktionen

Empfehlungen für OEMs

Wenn das Gerät zuvor noch nie mit zusätzlichen Anruf-/Nachrichtenbeschränkungsfunktionen ausgeliefert wurde, verwenden Sie auf allen solchen Geräten die Nummernblockierungsfunktion im Android Open Source Project (AOSP). Es wird empfohlen, angemessene Einstiegspunkte für die Blockierung zu unterstützen, z. B. die Blockierung einer Nummer direkt aus dem Anrufprotokoll oder innerhalb eines Nachrichtenthreads.

Wenn das Gerät zuvor mit Anruf-/Nachrichtenbeschränkungsfunktionen ausgeliefert wurde, passen Sie die Funktionen so an, dass alle gesperrten Telefonnummern mit strenger Übereinstimmung im BlockedNumberProvider, gespeichert werden und dass das Verhalten rund um den Anbieter den in der Android-Kompatibilität beschriebenen Anforderungen für diese Funktion entspricht Definitionsdokument (CDD).

Jede andere erweiterte Funktion kann über benutzerdefinierte Anbieter und benutzerdefinierte Benutzeroberflächen/Steuerelemente implementiert werden, sofern die CDD-Anforderungen in Bezug auf das Blockieren von Telefonnummern mit strenger Übereinstimmung erfüllt sind. Es wird empfohlen, diese anderen Funktionen als „erweiterte“ Funktionen zu kennzeichnen, um Verwechslungen mit der grundlegenden Nummernblockierungsfunktion zu vermeiden.

APIs

Hier sind die verwendeten APIs:

  • TelecomManager API
    • Intent createManageBlockedNumbersIntent()
  • Carrier Config
    • KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
  • Bitte beziehen Sie sich auf BlockedNumberContract
    • Von BlockedNumberContract bereitgestellte APIs
    • boolean isBlocked(Context context, String phoneNumber)
    • int unblock(Context context, String phoneNumber)
    • boolean canCurrentUserBlockNumbers(Context context)

Benutzeroberfläche

Die in AOSP bereitgestellte Benutzeroberfläche BlockedNumbersActivity.java kann unverändert verwendet werden. Geräteimplementierer können auch ihre eigene Version der Benutzeroberfläche implementieren, sofern diese die entsprechenden CDD-Anforderungen erfüllt.

Bitte beachten Sie, dass möglicherweise die PC-Anwendung des Partners für Sicherung und Wiederherstellung erforderlich ist, um die Wiederherstellung der Sperrliste mithilfe von BlockedNumberProvider zu implementieren. Sehen Sie sich die Bilder unten für die in AOSP bereitgestellte Schnittstelle für gesperrte Nummern an.

Blocknummern-Benutzeroberfläche

Abbildung 2. Benutzeroberfläche zum Blockieren von Telefonnummern

Validierung

Implementierer können sicherstellen, dass ihre Version der Funktion wie vorgesehen funktioniert, indem sie die folgenden CTS-Tests ausführen:

android.provider.cts.BlockedNumberContractTest
com.android.cts.numberblocking.hostside.NumberBlockingTest
android.telecom.cts.ExtendedInCallServiceTest#testIncomingCallFromBlockedNumber_IsRejected
android.telephony.cts.SmsManagerTest#testSmsBlocking

Der BlockedNumberProvider kann mithilfe adb Befehlen manipuliert werden, nachdem $ adb root ausgeführt wurde. Zum Beispiel:

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