Debido a que la telefonía es un canal de comunicación muy abierto (cualquier persona puede llamar o enviar un mensaje de texto a cualquier número en cualquier momento), los usuarios de Android necesitan poder bloquear fácilmente las llamadas y los mensajes no deseados.
Antes de Android 7.0, los usuarios de Android debían depender de apps descargadas para restringir las llamadas y los mensajes de texto de números de teléfono molestos. Muchas de esas apps no funcionan como se desea o proporcionan una experiencia poco ideal porque no hay APIs adecuadas para bloquear llamadas y mensajes.
Es posible que algunos fabricantes envíen sus propias soluciones de bloqueo listas para usar, pero si los usuarios cambian de dispositivo, es posible que pierdan por completo la lista de bloqueo debido a la falta de interoperabilidad. Por último, incluso si los usuarios usan apps de marcado y clientes de mensajería que proporcionan esa funcionalidad, es probable que deban realizar la acción de bloqueo en cada app para que el bloqueo se aplique a las llamadas y los 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 sistema respetará los números de la lista de bloqueo y restringirá 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 permite que el sistema y las apps relevantes de la plataforma funcionen en conjunto para ayudar a proteger al usuario y simplificar la experiencia. El selector de llamadas predeterminado, el cliente de mensajería predeterminado, la app con privilegios de UICC y las apps con la misma firma que el sistema pueden leer y escribir directamente en la lista de bloqueo. 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, sin importar el fabricante.
- Se le garantizará al usuario que tendrá una función de bloqueo que funciona de inmediato y que no perderá su lista de bloqueo cuando cambie de app o compre 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. Simplemente pueden usar la 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 interfaz de usuario de administración de la lista de entidades bloqueadas con
createManageBlockedNumbersIntent()
. - Los OEMs pueden usar la función proporcionada por la plataforma para enviar una función de bloqueo lista para usar. 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 el operador tiene su propio dialer o app de mensajería, puede volver a usar 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 puede permanecer con ellos, 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

Figura 1: Bloquea el flujo de datos de números de teléfono
Ejemplos y fuente
Estos son ejemplos de llamadas que usan la nueva función de bloqueo de números:
Cómo iniciar el administrador de números bloqueados desde la app
Context.startActivity(telecomManager.createManageBlockedNumbersIntent(), null);
Cómo consultar los 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);
Cómo poner un número bloqueado
ContentValues values = new ContentValues(); values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890"); Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
Cómo borrar un 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 usar la función de bloqueo de números:
- Los OEMs implementan funciones de restricción de llamadas o mensajes en sus dispositivos con
BlockedNumberProvider
. - Si el operador tiene una app de teléfono o mensajería, usa
BlockedNumberProvider
para implementar las funciones de restricción de llamadas o mensajes. - Los proveedores de apps de dialer y mensajería externos usan
BlockedNumberProvider
para sus funciones de bloqueo.
Recomendaciones para OEMs
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 se admitan puntos de entrada razonables para el bloqueo, como bloquear un número directamente desde el registro de llamadas o dentro de una conversación de mensajes.
Si el dispositivo se envió anteriormente con funciones de restricción de llamadas o mensajes, adapta las funciones para que todos los números de teléfono de coincidencia estricta bloqueados se almacenen en BlockedNumberProvider,
y que el comportamiento en torno al proveedor satisfaga los requisitos de esta función que se describen en el Documento de definición de compatibilidad (CDD) de Android.
Cualquier otra función avanzada se puede implementar a través de proveedores personalizados y controles o IU personalizados, siempre que se cumplan los requisitos de CDD en relación con el bloqueo de números de teléfono de coincidencia estricta. Se recomienda que esas otras funciones se etiqueten como “avanzadas” para evitar confusiones con la función básica de bloqueo de números.
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)
- APIs proporcionadas por
Interfaz de usuario
La interfaz de usuario BlockedNumbersActivity.java proporcionada en AOSP se puede usar tal como está. Los implementadores de dispositivos también pueden implementar su propia versión de la IU, siempre que satisfaga los requisitos de CDD relacionados.
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 siguientes imágenes para ver la interfaz de números bloqueados que se proporciona en AOSP.

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
Se puede manipular BlockedNumberProvider
con los 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