Implémentation de numéros de téléphone bloqués

Parce que la téléphonie est un canal de communication très ouvert (n'importe qui peut appeler ou envoyer un SMS à n'importe quel numéro à tout moment), les utilisateurs d'Android doivent pouvoir bloquer facilement les appels et les SMS indésirables.

Avant N, les utilisateurs d’Android devaient s’appuyer sur des applications téléchargées pour restreindre 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ée pour bloquer les appels et les messages.

Certains fabricants peuvent proposer leurs propres solutions de blocage prêtes à l'emploi, mais si les utilisateurs changent d'appareil, ils risquent de perdre complètement la liste des appareils bloqués en raison du manque d'interopérabilité. Enfin, même si les utilisateurs utilisent des applications de numérotation et des clients de messagerie offrant une telle fonctionnalité, ils devront probablement toujours effectuer l'action de blocage dans chaque application pour que le blocage prenne effet à la fois pour les appels et pour l'envoi de SMS.

Caractéristiques

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é ne doit pas pouvoir les contacter via des communications téléphoniques (appels, SMS, MMS). Le système respectera les numéros de la liste bloquée en limitant les appels et les SMS provenant de ces numéros. Android 7.0 affiche la liste des numéros bloqués et permet à l'utilisateur d'ajouter et de supprimer des numéros.

De plus, la fonction de blocage de numéros permet au système et aux applications pertinentes de la plate-forme de travailler 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 UICC et les applications portant la même signature que le système peuvent tous lire et écrire directement dans la liste bloquée. Étant donné que les numéros bloqués sont stockés sur le système, quelles que soient les applications de numérotation ou de messagerie utilisées par l'utilisateur, les numéros restent bloqués. Enfin, la liste des numéros bloqués pourra être restaurée sur tout nouvel appareil, quel que soit le fabricant.

  • L'utilisateur aura la garantie de disposer d'une fonction 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 rationalisée.
  • Les développeurs d'applications n'ont pas besoin de développer leur propre méthode pour gérer une liste de blocage ainsi que les appels et les messages entrants. Ils peuvent simplement utiliser la fonctionnalité fournie par la plateforme.
  • Les applications de numérotation/messager sélectionnées par défaut par l'utilisateur peuvent lire et écrire sur le fournisseur. D'autres applications peuvent lancer l'interface utilisateur de gestion des listes de blocage en utilisant 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 quittent l'appareil d'un autre OEM, ils bénéficient d'une meilleure expérience d'intégration, car la liste de blocage sera également transférée.
  • Si l'opérateur dispose de sa propre application de numérotation ou de messagerie, il peut réutiliser la fonctionnalité de la plate-forme pour permettre à l'utilisateur de conserver une liste de blocage. Ils peuvent être assurés que la liste de blocage de l'utilisateur peut rester avec les utilisateurs, même lorsqu'ils obtiennent un nouvel appareil. Enfin, toutes les applications privilégiées par l'opérateur peuvent lire la liste de blocage, donc si l'opérateur souhaite fournir un blocage supplémentaire plus puissant à l'utilisateur en fonction de la liste de blocage, cela est désormais possible avec cette fonctionnalité.

Flux de données

flux de données des numéros de bloc

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 de 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 un numéro bloqué

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

Supprimer le 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);

Mise en œuvre

Voici les tâches de haut niveau qui doivent être accomplies pour utiliser la fonctionnalité de blocage de numéros :

  • Les OEM implémentent des fonctionnalités de restriction d'appels/messages sur leurs appareils à l'aide de BlockedNumberProvider
  • Si l'opérateur dispose d'une application de numérotation ou de messagerie, implémentez des fonctionnalités de restriction d'appels/messages à l'aide de BlockedNumberProvider
  • Les fournisseurs tiers d'applications de numérotation et de messagerie utilisent BlockedNumberProvider pour leurs fonctionnalités de blocage

Recommandations pour les OEM

Si l'appareil n'a jamais été livré avec des fonctionnalités supplémentaires de restriction d'appels/messages, utilisez la fonction de blocage de numéros dans le 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, comme le blocage d'un numéro directement à partir du journal des appels ou dans un fil de discussion.

Si l'appareil était déjà livré avec des fonctionnalités de restriction d'appels/messages, adaptez les fonctionnalités de sorte que tous les numéros de téléphone à correspondance stricte qui sont bloqués soient stockés dans BlockedNumberProvider, et que le comportement autour du fournisseur satisfasse aux exigences de cette fonctionnalité décrites dans la compatibilité Android. Document de Définition (CDD).

Toute autre fonctionnalité avancée peut être implémentée via des fournisseurs personnalisés et une interface utilisateur/contrôles personnalisés, à condition que les exigences CDD soient satisfaites en ce qui concerne le blocage des numéros de téléphone à correspondance stricte. Il est recommandé que ces autres fonctionnalités soient étiquetées comme fonctionnalités « avancées » pour éviter toute confusion avec la fonctionnalité de base de blocage de numéros.

Apis

Voici les API utilisées :

  • TelecomManager API
    • Intent createManageBlockedNumbersIntent()
  • Carrier Config
    • KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
  • Veuillez vous référer à BlockedNumberContract
    • API fournies par BlockedNumberContract
    • boolean isBlocked(Context context, String phoneNumber)
    • int unblock(Context context, String phoneNumber)
    • boolean canCurrentUserBlockNumbers(Context context)

Interface utilisateur

L'interface utilisateur BlockedNumbersActivity.java fournie dans AOSP peut être utilisée telle quelle. Les responsables de la mise en œuvre des appareils peuvent également implémenter leur propre version de l'interface utilisateur, à condition qu'elle satisfasse aux exigences CDD associées.

Veuillez noter que l'application PC du partenaire pour la sauvegarde et la restauration peut être nécessaire pour mettre en œuvre la restauration de la liste de blocage à l'aide de BlockedNumberProvider . Voir les images ci-dessous pour l'interface des numéros bloqués fournie dans AOSP.

interface utilisateur des numéros de bloc

Figure 2. Interface utilisateur de blocage des numéros de téléphone

Validation

Les développeurs peuvent garantir 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 des commandes adb après avoir exécuté $ adb root . Par 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