Étant donné que la téléphonie est un canal de communication très ouvert (n'importe qui peut appeler ou envoyer un message à n'importe quel numéro à tout moment), les utilisateurs Android doivent pouvoir bloquer facilement les appels et les messages indésirables.
Avant Android 7.0, les utilisateurs d'Android devaient utiliser des applications téléchargées pour limiter les appels et les SMS provenant de numéros de téléphone gênants. Beaucoup de ces applications ne fonctionnent pas comme souhaité ou offrent une expérience loin d'être idéale, car il n'existe pas d'API appropriées pour bloquer les appels et les messages.
Certains fabricants peuvent fournir leurs propres solutions de blocage prêtes à l'emploi, mais si les utilisateurs changent d'appareil, ils peuvent perdre complètement la liste de blocage en raison du manque d'interopérabilité. Enfin, même si les utilisateurs utilisent des applications de numérotation et des clients de messagerie qui fournissent cette fonctionnalité, ils doivent probablement effectuer l'action de blocage dans chaque application pour que le blocage soit appliqué à la fois aux appels et aux messages.
Fonctionnalités
La version Android 7.0 introduit un fournisseur de contenu BlockedNumberProvider
qui stocke une liste de numéros de téléphone que l'utilisateur a spécifiés comme ne devant pas pouvoir le contacter via des communications téléphoniques (appels, SMS, MMS). Le système respectera les numéros de la liste de blocage en limitant les appels et les SMS émis depuis ces numéros. Android 7.0 affiche la liste des numéros bloqués et permet à l'utilisateur d'en ajouter et d'en supprimer.
De plus, la fonctionnalité de blocage des numéros permet au système et aux applications pertinentes de la plate-forme de fonctionner ensemble pour aider à protéger l'utilisateur et à simplifier l'expérience. Le numéroteur par défaut, le client de messagerie par défaut, l'application privilégiée par l'UICC et les applications ayant la même signature que le système peuvent toutes lire et écrire directement dans la liste de blocage. Étant donné que les numéros bloqués sont stockés dans le système, ils restent bloqués, quelle que soit l'application de numérotation ou de messagerie utilisée par l'utilisateur. Enfin, la liste des numéros bloqués peut être restaurée sur n'importe quel nouvel appareil, quel que soit le fabricant.
- L'utilisateur disposera d'une fonctionnalité de blocage prête à l'emploi et ne perdra pas sa liste de blocage lorsqu'il changera d'application ou obtiendra un nouveau téléphone. Toutes les applications pertinentes du système peuvent partager la même liste pour offrir à l'utilisateur l'expérience la plus fluide possible.
- Les développeurs d'applications n'ont pas besoin de développer leur propre méthode pour gérer une liste de blocage et les appels et messages entrants. Ils peuvent simplement utiliser la fonctionnalité fournie par la plate-forme.
- Les applications de téléphonie / de messagerie sélectionnées par défaut par l'utilisateur peuvent lire et écrire des données auprès du fournisseur. D'autres applications peuvent lancer l'interface utilisateur de gestion de la liste de blocage à l'aide de
createManageBlockedNumbersIntent()
. - Les OEM peuvent utiliser la fonctionnalité fournie par la plate-forme pour fournir une fonctionnalité de blocage prête à l'emploi. Les OEM peuvent être assurés que lorsque les utilisateurs passent d'un appareil d'un autre OEM, ils bénéficient d'une meilleure expérience d'intégration, car la liste de blocage est également transférée.
- Si l'opérateur dispose de son propre application de numérotation ou de messagerie, il peut réutiliser la fonctionnalité de la plate-forme pour permettre à l'utilisateur de gérer une liste de blocage. Ils peuvent être assurés que la liste de blocage de l'utilisateur peut rester avec l'utilisateur, même lorsqu'il reçoit un nouvel appareil. Enfin, toutes les applications privilégiées par l'opérateur peuvent lire la liste de blocage. Si l'opérateur souhaite fournir un blocage plus puissant à l'utilisateur en fonction de la liste de blocage, il peut désormais le faire grâce à cette fonctionnalité.
Flux de données

Figure 1 : Bloquer le flux de données des numéros de téléphone
Exemples et source
Voici des exemples d'appels utilisant la nouvelle fonctionnalité de blocage des numéros:
Lancer le gestionnaire de numéros bloqués depuis l'application
Context.startActivity(telecomManager.createManageBlockedNumbersIntent(), null);
Interroger les numéros bloqués
Cursor c = getContentResolver().query(BlockedNumbers.CONTENT_URI, new String[]{BlockedNumbers.COLUMN_ID, BlockedNumbers.COLUMN_ORIGINAL_NUMBER, BlockedNumbers.COLUMN_E164_NUMBER}, null, null, null);
Mettre le numéro bloqué
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
Supprimer un numéro bloqué
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values); getContentResolver().delete(uri, null, null);
Implémentation
Voici les tâches générales à effectuer pour utiliser la fonctionnalité de blocage des numéros:
- Les OEM implémentent des fonctionnalités de restriction des appels/messages sur leurs appareils à l'aide de
BlockedNumberProvider
. - Si l'opérateur dispose d'une application Téléphone ou de messagerie, implémentez les fonctionnalités de restriction des appels/messages à l'aide de
BlockedNumberProvider
. - Les fournisseurs d'applications de numérotation et de messagerie tiers utilisent
BlockedNumberProvider
pour leurs fonctionnalités de blocage.
Recommandations pour les OEM
Si l'appareil n'a jamais été livré avec des fonctionnalités de restriction d'appels/de messages supplémentaires, utilisez la fonctionnalité de blocage de numéro du Projet Android Open Source (AOSP) sur tous ces appareils. Il est recommandé de prendre en charge des points d'entrée raisonnables pour le blocage, par exemple le blocage d'un numéro directement depuis le journal des appels ou dans un fil de discussion.
Si l'appareil était auparavant livré avec des fonctionnalités de restriction des appels/messages, adaptez les fonctionnalités afin que tous les numéros de téléphone à correspondance stricte bloqués soient stockés dans BlockedNumberProvider,
et que le comportement du fournisseur réponde aux exigences de cette fonctionnalité décrites dans le document de définition de la compatibilité Android (CDD).
Toute autre fonctionnalité avancée peut être implémentée via des fournisseurs personnalisés et une UI/des commandes personnalisées, à condition que les exigences de CDD soient respectées en ce qui concerne le blocage des numéros de téléphone correspondant exactement. Il est recommandé de les désigner comme des fonctionnalités "avancées" pour éviter toute confusion avec la fonctionnalité de blocage de numéro de base.
API
Voici les API utilisées:
TelecomManager API
Intent createManageBlockedNumbersIntent()
Carrier Config
KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
- Veuillez consulter
BlockedNumberContract
- API fournies par
BlockedNumberContract
boolean isBlocked(Context context, String phoneNumber)
int unblock(Context context, String phoneNumber)
boolean canCurrentUserBlockNumbers(Context context)
- API fournies par
Interface utilisateur
L'interface utilisateur BlockedNumbersActivity.java fournie dans AOSP peut être utilisée telle quelle. Les implémentateurs d'appareils peuvent également implémenter leur propre version de l'UI, à condition qu'elle réponde aux exigences de la CDD associées.
Veuillez noter que l'application PC du partenaire pour la sauvegarde et la restauration peut être nécessaire pour implémenter la restauration de la liste de blocage à l'aide de BlockedNumberProvider
. Consultez les images ci-dessous pour l'interface des numéros bloqués fournie dans AOSP.

Figure 2. Interface utilisateur de la fonctionnalité de blocage des numéros de téléphone
Validation
Les implémentateurs peuvent s'assurer que leur version de la fonctionnalité fonctionne comme prévu en exécutant les tests CTS suivants:
android.provider.cts.BlockedNumberContractTest com.android.cts.numberblocking.hostside.NumberBlockingTest android.telecom.cts.ExtendedInCallServiceTest#testIncomingCallFromBlockedNumber_IsRejected android.telephony.cts.SmsManagerTest#testSmsBlocking
Le BlockedNumberProvider
peut être manipulé à l'aide de commandes adb
après l'exécution de $ adb root
. Exemple :
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