Telefonnummern blockieren

Da Telefonie ein so offener Kommunikationskanal ist – jeder kann jederzeit eine beliebige Nummer anrufen oder eine SMS senden –, müssen Android-Nutzer unerwünschte Anrufe und Nachrichten ganz einfach blockieren können.

Vor Android 7.0 mussten Android-Nutzer heruntergeladene Apps verwenden, um Anrufe und Nachrichten von lästigen Telefonnummern einzuschränken. Viele dieser Apps funktionieren entweder nicht wie gewünscht oder bieten keine optimale Leistung, da es keine geeigneten APIs zum Blockieren von Anrufen und Nachrichten gibt.

Einige Hersteller liefern möglicherweise ihre eigenen Blockierungslösungen aus der Box. Wenn Nutzer jedoch das Gerät wechseln, geht die Blockierungsliste aufgrund mangelnder Interoperabilität möglicherweise vollständig verloren. Selbst wenn Nutzer Anruf- und Messaging-Apps verwenden, die diese Funktion bieten, müssen sie die Blockierung wahrscheinlich in jeder App vornehmen, damit sie sowohl für Anrufe als auch für Nachrichten gilt.

Funktionen

Mit der Android 7.0-Version wird ein BlockedNumberProvider-Inhaltsanbieter eingeführt, der eine Liste von Telefonnummern speichert, von denen der Nutzer angegeben hat, dass sie ihn nicht über Telefonkommunikation (Anrufe, SMS, MMS) kontaktieren dürfen. Das System berücksichtigt die Nummern in der Blockierungsliste und schränkt Anrufe und SMS von diesen Nummern ein. Android 7.0 zeigt die Liste der blockierten Nummern an und ermöglicht es Nutzern, Nummern hinzuzufügen und zu entfernen.

Außerdem ermöglicht die Funktion zum Blockieren von Nummern die Zusammenarbeit zwischen dem System und den relevanten Apps auf der Plattform, um den Nutzer zu schützen und die Nutzung zu vereinfachen. Der Standard-Telefon-App, der Standard-Messaging-Client, die App mit UICC-Berechtigungen und Apps mit derselben Signatur wie das System können alle direkt in die Sperrliste lesen und darin schreiben. Da die blockierten Nummern im System gespeichert sind, bleiben sie unabhängig von den Anruf- oder Messaging-Apps, die der Nutzer verwendet, blockiert. Die Liste der blockierten Nummern kann auf jedem neuen Gerät wiederhergestellt werden, unabhängig vom Hersteller.

  • Nutzer haben eine betriebsbereite Blockierfunktion und verlieren ihre Blockierungsliste nicht, wenn sie die App wechseln oder ein neues Smartphone kaufen. Alle relevanten Apps auf dem System können dieselbe Liste verwenden, um den Nutzern eine möglichst reibungslose Nutzung zu ermöglichen.
  • App-Entwickler müssen keine eigene Methode zur Verwaltung einer Sperrliste und der eingehenden Anrufe und Nachrichten entwickeln. Sie können einfach die von der Plattform bereitgestellte Funktion verwenden.
  • Anruf-/Messenger-Apps, die vom Nutzer als Standard ausgewählt werden, können Daten vom und zum Anbieter lesen und schreiben. Andere Apps können die Benutzeroberfläche zum Verwalten der Sperrliste mit createManageBlockedNumbersIntent() aufrufen.
  • OEMs können die von der Plattform bereitgestellte Funktion verwenden, um eine Blockierfunktion direkt aus der Verpackung zu liefern. OEMs können sich darauf verlassen, dass Nutzer, die von einem Gerät eines anderen OEMs wechseln, ein besseres Onboarding haben, da die Blockierungsliste ebenfalls übertragen wird.
  • Wenn der Mobilfunkanbieter eine eigene Telefon- oder Messaging-App hat, kann er die Plattformfunktion wiederverwenden, um Nutzern die Verwaltung einer Sperrliste zu ermöglichen. Sie können sich darauf verlassen, dass die Blockierungsliste der Nutzer auch dann beibehalten wird, wenn sie ein neues Gerät erhalten. Außerdem können alle Apps mit Berechtigungen des Mobilfunkanbieters die Sperrliste lesen. Wenn der Mobilfunkanbieter also zusätzliche, leistungsstärkere Sperrungen für den Nutzer basierend auf der Sperrliste bereitstellen möchte, ist dies jetzt mit dieser Funktion möglich.

Datenfluss

block numbers data flow

Abbildung 1: Datenfluss von Telefonnummern blockieren

Beispiele und Quelle

Hier sind Beispiele für Anrufe mit der neuen Funktion zum Blockieren von Nummern:

Blockierte Nummern-Manager über die App starten

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

Blockierte 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);

Blockierte Nummer eingeben

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

Blockierte 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 erledigt werden müssen, um die Funktion zum Blockieren von Nummern zu verwenden:

  • OEMs implementieren Funktionen zur Anruf-/Nachrichtenbeschränkung auf ihren Geräten mithilfe von BlockedNumberProvider
  • Wenn der Mobilfunkanbieter eine Telefon- oder Messaging-App hat, implementieren Sie Funktionen zur Anruf-/Nachrichtenbeschränkung mithilfe von BlockedNumberProvider.
  • Anbieter von Drittanbieter-Anruf- und Messaging-Apps verwenden BlockedNumberProvider für ihre Blockierfunktionen

Empfehlungen für OEMs

Wenn das Gerät bisher keine zusätzlichen Funktionen zur Anruf-/Nachrichtenbeschränkung hatte, verwenden Sie auf allen solchen Geräten die Nummernsperre im Android Open Source Project (AOSP). Es wird empfohlen, dass vernünftige Einstiegspunkte für die Blockierung unterstützt werden, z. B. die Blockierung einer Nummer direkt über das Anrufprotokoll oder in einem Nachrichten-Thread.

Wenn das Gerät zuvor mit Funktionen zur Anruf-/Nachrichtenbeschränkung geliefert wurde, passen Sie die Funktionen so an, dass alle blockierten Telefonnummern mit exakter Übereinstimmung in der BlockedNumberProvider, gespeichert werden und das Verhalten des Anbieters die im Android Compatibility Definition Document (CDD) beschriebenen Anforderungen für diese Funktion erfüllt.

Alle anderen erweiterten Funktionen können über benutzerdefinierte Anbieter und benutzerdefinierte Benutzeroberflächen/Steuerelemente implementiert werden, sofern die Anforderungen an die Kundendatenermittlung in Bezug auf das Blockieren von Telefonnummern mit exakter Übereinstimmung erfüllt sind. Es wird empfohlen, diese anderen Funktionen als „erweiterte“ Funktionen zu kennzeichnen, um Verwechslungen mit der grundlegenden Funktion zum Blockieren von Nummern zu vermeiden.

APIs

Folgende APIs werden verwendet:

  • TelecomManager API
    • Intent createManageBlockedNumbersIntent()
  • Carrier Config
    • KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
  • Weitere Informationen finden Sie unter 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 eine eigene Version der Benutzeroberfläche implementieren, sofern diese die entsprechenden CDD-Anforderungen erfüllt.

Hinweis: Möglicherweise ist die PC-App des Partners für Sicherung und Wiederherstellung erforderlich, um die Blockierungsliste mithilfe von BlockedNumberProvider wiederherzustellen. In den Bildern unten sehen Sie die Oberfläche für blockierte Nummern, die in AOSP bereitgestellt wird.

Benutzeroberfläche zum Blockieren von Nummern

Abbildung 2: Benutzeroberfläche zum Blockieren von Telefonnummern

Zertifizierungsstufe

Mit den folgenden CTS-Tests können Implementierer dafür sorgen, dass ihre Version der Funktion wie vorgesehen funktioniert:

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

Nach dem Ausführen von $ adb root kann BlockedNumberProvider mit adb-Befehlen manipuliert werden. 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