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

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)
- Von
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.

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