Implementa el bloqueo de números de teléfono

Como la telefonía es un canal de comunicación abierto, cualquiera puede llamar o Envíen un mensaje de texto con cualquier número en cualquier momento. Los usuarios de Android deben poder bloquear llamadas y mensajes de texto no deseados.

En versiones anteriores a Android 7.0, los usuarios de Android debían depender de las apps descargadas para restringir llamadas y mensajes de texto de números de teléfono molestos. Muchas de esas apps no funcionan como deseado o proporcionar una experiencia poco satisfactoria, ya que no hay APIs 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, es posible que pierdan por completo la lista de bloqueados debido a la falta de interoperabilidad. Por último, incluso si los usuarios usan aplicaciones de marcación y clientes de mensajería que ofrezcan esa funcionalidad, es probable que aún deban realizar la acción de bloqueo en cada app para que el bloqueo se aplique en ambas llamadas y mensajes de texto.

Funciones

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

Además, la función de bloqueo de números habilita al sistema y a las apps relevantes en la plataforma para ayudar a proteger al usuario y simplificar la una experiencia fluida a los desarrolladores. 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 en la lista de personas bloqueadas. Como los números bloqueados se almacenan en el sistema, los números permanecen bloqueados, independientemente de las apps de marcado o mensajería que use el usuario. Por último, la lista de números bloqueados se puede restablecer en cualquier dispositivo nuevo. independientemente del fabricante.

  • Se garantiza que el usuario dispone de una función de bloqueo que funciona desde el primer momento. y no perderá su lista de números bloqueados cuando cambie de app o adquiera un teléfono nuevo. Todas las apps relevantes del sistema pueden compartir la misma lista para brindarle al usuario la experiencia más optimizada.
  • Los desarrolladores de apps no necesitan desarrollar su propia forma de administrar una lista de bloqueo ni las llamadas y los mensajes que llegan. Pueden simplemente usar y una función proporcionada por la plataforma.
  • Las apps de dialer o mensajería que el usuario selecciona como predeterminadas pueden leer y escribir en el proveedor. Otras apps pueden iniciar la administración de la lista de entidades bloqueadas. interfaz de usuario con createManageBlockedNumbersIntent()
  • Los OEM pueden usar la función proporcionada por la plataforma para enviar una función de bloqueo. de uso inmediato. Los OEMs pueden estar seguros de que, cuando los usuarios cambien de un dispositivo de otro OEM, tendrán una mejor experiencia de integración, ya que la lista de bloqueo también se transferirá.
  • Si la empresa de transporte tiene su propia app de teléfono o mensajería, puede reutilizar la plataforma. para permitir que el usuario mantenga una lista de usuarios bloqueados. Pueden estar seguros de que la lista de bloqueo del usuario puede permanecer con los usuarios, incluso cuando obtienen un dispositivo nuevo. Por último, todas las apps con privilegios del operador pueden leer la lista de bloqueos, por lo que, si el operador desea proporcionar un bloqueo adicional más potente para el usuario según la lista de bloqueos, ahora es posible con esta función.

Flujo de datos

flujo de datos de números de bloque

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

Ejemplos y fuente

A continuación, se muestran ejemplos de llamadas que usan la nueva función de bloqueo de número:

Iniciar el administrador de números bloqueados desde la app

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

Colocar número bloqueado

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

Borrar 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 el bloqueo de números función que puedes usar:

  • Los OEMs implementan funciones de restricción de llamadas o mensajes en sus dispositivos usando BlockedNumberProvider
  • Si el operador tiene una app de teléfono o de mensajería, implementa la función de llamada o mensaje funciones de restricción con BlockedNumberProvider
  • Los proveedores de apps de dialer y mensajería externos usan BlockedNumberProvider para sus funciones de bloqueo.

Recomendaciones para OEM

Si el dispositivo nunca se envió con funciones adicionales de restricción de llamadas o mensajes, usa 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 las entradas sean razonables se admiten puntos de bloqueo, como el bloqueo de un número directamente desde la llamada. registro o dentro de una cadena de mensajes.

Si el dispositivo ya se había enviado con funciones de restricción de llamadas o mensajes, Adapta las funciones para que todos los números de teléfono de concordancia estricta estén bloqueados. se almacenan en BlockedNumberProvider, y que el comportamiento en torno al proveedor cumplan con los requisitos de esta función descritos en Documento de definición de compatibilidad de Android (CDD).

Cualquier otra función avanzada se puede implementar a través de proveedores personalizados y una IU personalizada. y controles, siempre que se cumplan los requisitos del CDD con respecto a bloqueando números de teléfono de concordancia estricta. Se recomienda que esas otras funciones estar etiquetados como funciones "avanzadas" para evitar confusiones con la configuración de bloqueo de números de teléfono.

APIs

Estas son las APIs en uso:

  • TelecomManager API
    • Intent createManageBlockedNumbersIntent()
  • Carrier Config
    • KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
  • Consulta BlockedNumberContract.
    • APIs 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 usar como en la nube. Los implementadores de dispositivos también pueden implementar su propia versión de la IU, siempre y cuando que satisfaga los requisitos relacionados del CDD.

Ten en cuenta que es posible que se necesite la app para PC del socio para crear copias de seguridad y restablecer la lista de bloqueos con BlockedNumberProvider. Consulta las imágenes a continuación de los elementos bloqueados de números de serie proporcionada en el 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 ejecutar las siguientes pruebas de CTS para asegurarse de que su versión de la función funcione según lo previsto:

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 con 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