Implementación de números de teléfono bloqueados

Debido a que la telefonía es un canal de comunicación tan abierto (cualquiera puede llamar o enviar mensajes de texto a cualquier número en cualquier momento), los usuarios de Android necesitan la capacidad de bloquear fácilmente llamadas y mensajes de texto no deseados.

Antes de N, los usuarios de Android tenían que confiar en las aplicaciones descargadas para restringir las llamadas y los mensajes de texto de números de teléfono molestos. Muchas de esas aplicaciones no funcionan como se desea o brindan una experiencia menos que ideal porque no hay API adecuadas para bloquear llamadas y mensajes.

Algunos fabricantes pueden enviar sus propias soluciones de bloqueo listas para usar, pero si los usuarios cambian de dispositivo, pueden perder la lista de bloqueados por completo debido a la falta de interoperabilidad. Finalmente, incluso si los usuarios utilizan aplicaciones de marcación y clientes de mensajería que brindan dicha funcionalidad, es probable que aún tengan que realizar la acción de bloqueo en cada aplicación para que el bloqueo surta efecto tanto para las llamadas como para los mensajes de texto.

Características

La versión de Android 7.0 presenta un proveedor de contenido BlockedNumberProvider que almacena una lista de números de teléfono que el usuario ha especificado que no debería poder contactar con ellos a través de comunicaciones telefónicas (llamadas, SMS, MMS). El sistema respetará los números en la lista bloqueada al restringir las llamadas y los mensajes de texto de esos números. Android 7.0 muestra la lista de números bloqueados y permite al usuario agregar y eliminar números.

Además, la función de bloqueo de números permite que el sistema y las aplicaciones relevantes en la plataforma trabajen juntas para ayudar a proteger al usuario y simplificar la experiencia. El marcador predeterminado, el cliente de mensajería predeterminado, la aplicación con privilegios de UICC y las aplicaciones con la misma firma que el sistema pueden leer y escribir directamente en la lista bloqueada. Debido a que los números bloqueados se almacenan en el sistema, sin importar qué aplicaciones de marcación o mensajería emplee el usuario, los números permanecen bloqueados. Finalmente, la lista de números bloqueados se puede restaurar en cualquier dispositivo nuevo, independientemente del fabricante.

  • Se garantizará que el usuario tenga una función de bloqueo que funcione de inmediato y no perderá su lista de bloqueo cuando cambie de aplicación o adquiera un nuevo teléfono. Todas las aplicaciones relevantes del sistema pueden compartir la misma lista para brindar al usuario la experiencia más optimizada.
  • Los desarrolladores de aplicaciones no necesitan desarrollar su propia forma de administrar una lista de bloqueo y las llamadas y mensajes que ingresan. Simplemente pueden usar la función proporcionada por la plataforma.
  • Las aplicaciones de marcador/mensajería que el usuario selecciona como predeterminadas pueden leer y escribir en el proveedor. Otras aplicaciones pueden iniciar la interfaz de usuario de administración de listas de bloqueo utilizando createManageBlockedNumbersIntent()
  • Los OEM pueden usar la función proporcionada por la plataforma para enviar una función de bloqueo lista para usar. Los OEM pueden estar seguros de que cuando los usuarios cambien desde el dispositivo de otro OEM, tendrán una mejor experiencia de incorporación porque la lista de bloqueo también se transferirá.
  • Si el operador tiene su propio marcador o aplicación de mensajería, puede reutilizar la función de la plataforma para permitir que el usuario mantenga una lista de bloqueo. Pueden estar seguros de que la lista de bloqueo del usuario permanecerá con los usuarios, incluso cuando obtengan un nuevo dispositivo. Finalmente, todas las aplicaciones con privilegios de operador pueden leer la lista de bloqueo, por lo que si el operador desea proporcionar un bloqueo adicional más potente para el usuario basado en la lista de bloqueo, ahora es posible con esta función.

Flujo de datos

flujo de datos de números de bloque

Figura 1. Flujo de datos de bloques de números de teléfono

Ejemplos y fuente

Estos son ejemplos de llamadas que utilizan la nueva función de bloqueo de números:

Inicie el administrador de números bloqueados desde la aplicación

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

Consultar números bloqueados

Cursor c = getContentResolver().query(BlockedNumbers.CONTENT_URI,
         new String[]{BlockedNumbers.COLUMN_ID,
         BlockedNumbers.COLUMN_ORIGINAL_NUMBER,
         BlockedNumbers.COLUMN_E164_NUMBER}, null, null, null);

Poner numero bloqueado

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

Eliminar número bloqueado

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

Implementación

Estas son las tareas de alto nivel que deben completarse para poner en uso la función de bloqueo de números:

  • Los OEM implementan funciones de restricción de llamadas/mensajes en sus dispositivos mediante el uso de BlockedNumberProvider
  • Si el operador tiene una aplicación de marcador o mensajero, implemente funciones de restricción de llamadas/mensajes utilizando BlockedNumberProvider
  • Los proveedores de aplicaciones de mensajería y marcación de terceros utilizan BlockedNumberProvider para sus funciones de bloqueo

Recomendaciones para OEM

Si el dispositivo nunca se envió anteriormente con funciones adicionales de restricción de llamadas/mensajes, use la función de bloqueo de números en el Proyecto de código abierto de Android (AOSP) en todos esos dispositivos. Se recomienda que se admitan puntos de entrada razonables para el bloqueo, como bloquear un número directamente desde el registro de llamadas o dentro de un hilo de mensajes.

Si el dispositivo se envió previamente con funciones de restricción de llamadas/mensajes, adapte las funciones para que todos los números de teléfono de coincidencia estricta que están bloqueados se almacenen en BlockedNumberProvider, y que el comportamiento en torno al proveedor cumpla con los requisitos para esta función descritos en la Compatibilidad con Android. Documento de Definición (CDD).

Cualquier otra función avanzada se puede implementar a través de proveedores personalizados y IU / controles personalizados, siempre que se cumplan los requisitos de CDD con respecto al bloqueo de números de teléfono de coincidencia estricta. Se recomienda que esas otras funciones se etiqueten como funciones "avanzadas" para evitar confusiones con la función básica de bloqueo de números.

API

Estas son las API en uso:

  • TelecomManager API
    • Intent createManageBlockedNumbersIntent()
  • Carrier Config
    • KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
  • Consulte BlockedNumberContract
    • API proporcionadas por BlockedNumberContract
    • boolean isBlocked(Context context, String phoneNumber)
    • int unblock(Context context, String phoneNumber)
    • boolean canCurrentUserBlockNumbers(Context context)

Interfaz de usuario

La interfaz de usuario de BlockedNumbersActivity.java proporcionada en AOSP se puede usar tal cual. Los implementadores de dispositivos también pueden implementar su propia versión de la interfaz de usuario, siempre que cumpla con los requisitos de CDD relacionados.

Tenga en cuenta que es posible que se necesite la aplicación de PC del socio para realizar copias de seguridad y restaurar para implementar la restauración de la lista de bloqueo mediante el uso de BlockedNumberProvider . Vea las imágenes a continuación para ver la interfaz de números bloqueados proporcionada en AOSP.

interfaz de usuario de números de bloque

Figura 2. Interfaz de usuario del bloque de números de teléfono

Validación

Los implementadores pueden asegurarse de que su versión de la función funcione según lo previsto ejecutando las siguientes pruebas CTS:

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

El BlockedNumberProvider se puede manipular mediante comandos adb después de ejecutar $ adb root . Por ejemplo:

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