Implementación de números de teléfono en bloque

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 depender de 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 que no es ideal porque no existen 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 completamente la lista de bloqueados debido a la falta de interoperabilidad. Finalmente, incluso si los usuarios emplean aplicaciones de marcado 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 Android 7.0 presenta un proveedor de contenido BlockedNumberProvider que almacena una lista de números de teléfono que el usuario ha especificado y 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 de bloqueados restringiendo las llamadas y 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 de 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 UICC y las aplicaciones con la misma firma que el sistema pueden leer y escribir directamente en la lista de bloqueados. Debido a que los números bloqueados se almacenan en el sistema, no importa qué aplicaciones de marcación o mensajería utilice 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 tendrá una función de bloqueo que funciona de inmediato y no perderá su lista de bloqueo cuando cambie de aplicación o adquiera un teléfono nuevo. 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 entran. Simplemente pueden usar la función proporcionada por la plataforma.
  • Las aplicaciones de marcador/mensajería seleccionadas como predeterminadas por el usuario pueden leer y escribir en el proveedor. Otras aplicaciones pueden iniciar la interfaz de usuario de administración de la lista de bloqueo usando createManageBlockedNumbersIntent()
  • Los OEM pueden utilizar la función proporcionada por la plataforma para ofrecer una función de bloqueo lista para usar. Los OEM pueden estar seguros de que cuando los usuarios cambien del 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 propia aplicación de marcador o mensajería, puede reutilizar la función de la plataforma para permitir al usuario mantener una lista de bloqueo. Pueden estar seguros de que la lista de bloqueo del usuario permanecerá con los usuarios, incluso cuando adquieran un nuevo dispositivo. Finalmente, todas las aplicaciones con privilegios del operador pueden leer la lista de bloqueo, por lo que si el operador desea proporcionar un bloqueo adicional más potente para el usuario en función de la lista de bloqueo, ahora es posible con esta función.

Flujo de datos

flujo de datos de números de bloque

Figura 1. Bloquear flujo de datos de números de teléfono

Ejemplos y fuente

A continuación se muestran 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 se deben completar para utilizar la función de bloqueo de números:

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

Recomendaciones para fabricantes de equipos originales

Si el dispositivo nunca antes se había enviado 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 había enviado anteriormente 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 satisfaga los requisitos para esta función descritos en Compatibilidad de Android. Documento de Definición (CDD).

Cualquier otra característica avanzada se puede implementar a través de proveedores personalizados y controles/UI 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 confusión 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 el 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 BlockedNumbersActivity.java proporcionada en AOSP se puede utilizar 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 restauración para implementar la restauración de la lista de bloqueo mediante 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 para bloquear 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

BlockedNumberProvider se puede manipular usando 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