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