Implementar o bloqueio de número de telefone

Como a telefonia é um canal de comunicação aberto, qualquer pessoa pode ligar ou envie mensagens de texto para qualquer número a qualquer momento - usuários de Android precisam bloquear facilmente chamadas e textos indesejados.

Antes do Android 7.0, os usuários do Android tinham que depender de apps baixados para restringir chamadas e mensagens de texto de números de telefone incômodas. Muitos desses aplicativos não funcionam como querem ou fornecem uma experiência inferior à ideal porque não há APIs adequadas. para bloquear chamadas e mensagens.

Alguns fabricantes podem enviar suas próprias soluções de bloqueio prontas para uso, Se os usuários trocarem de dispositivo, eles poderão perder a lista bloqueada completamente por falta de de interoperabilidade. Por fim, mesmo que os usuários usem aplicativos de discagem e aos clientes de mensagens que oferecem essa funcionalidade, eles provavelmente ainda vão precisar Realize a ação de bloqueio em cada app para que o bloqueio entre em vigor para ambos chamadas e mensagens de texto.

Recursos

A versão do Android 7.0 apresenta um provedor de conteúdo BlockedNumberProvider que armazena uma lista de números de telefone que o usuário especificou como não autorizados a entrar em contato com ele por meio de comunicações telefônicas (chamadas, SMS, MMS). O sistema respeitará os números na lista de bloqueados, restringindo chamadas e textos desses números. O Android 7.0 exibe a lista de números bloqueados e permite que o usuário adicione e remova números.

Além disso, o recurso de bloqueio de números permite que o sistema e os apps relevantes que a plataforma trabalhe em conjunto para ajudar a proteger o usuário e simplificar a do usuário. O discador padrão, o cliente de mensagens padrão, o app com privilégios UICC e apps com a mesma assinatura do sistema. gravar na lista de bloqueados. Como os números bloqueados são armazenados no sistema, independentemente dos aplicativos de discagem ou mensagens que o usuário utiliza, os números permanecem bloqueado. Por fim, a lista de números bloqueados pode ser restaurada em qualquer novo dispositivo, seja qual for o fabricante.

  • O usuário terá a garantia de ter um recurso de bloqueio pronto para uso e não perderá a lista de bloqueio quando eles trocarem de app ou comprarem um novo smartphone. Tudo aplicativos relevantes no sistema podem compartilhar a mesma lista para fornecer ao usuário uma experiência mais simples.
  • Os desenvolvedores de apps não precisam desenvolver um jeito próprio de gerenciar uma lista de bloqueio e as chamadas e mensagens recebidas. Eles podem simplesmente usar o e um recurso fornecido pela plataforma.
  • Os apps de telefone / mensagens padrão selecionados pelo usuário como padrão podem ler e gravar no provedor. Outros apps podem iniciar o gerenciamento da lista de bloqueio interface do usuário usando createManageBlockedNumbersIntent()
  • OEMs podem usar o recurso fornecido pela plataforma para lançar um recurso de bloqueio pronto para uso. Os OEMs podem ter certeza de que, quando os usuários trocam de OEMs dispositivo de que eles têm uma melhor experiência de integração, pois a lista de bloqueio também podem ser transferidas.
  • Se a operadora tiver um app de telefone ou app de mensagens, poderá reutilizar a plataforma para permitir que o usuário mantenha uma lista de bloqueio. Eles podem ficar tranquilos que a lista de bloqueio do usuário possa permanecer com os usuários, mesmo quando eles obtiverem uma nova dispositivo. Por fim, todos os aplicativos com privilégios da operadora podem ler a lista de bloqueios. Assim, se a a operadora quer oferecer mais recursos de bloqueio com base na lista de bloqueio, isso é possível com este recurso.

Fluxo de dados

fluxo de dados de números de blocos

Figura 1. Bloquear o fluxo de dados de números de telefone

Exemplos e origem

Veja alguns exemplos de chamadas que usam o novo recurso de bloqueio de números:

Abrir o gerenciador de números bloqueado no 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);

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

Implementação

Essas são as tarefas gerais que devem ser concluídas para colocar a função de bloqueio recurso a ser usado:

  • OEMs implementam recursos de restrição de chamadas/mensagens nos dispositivos usando BlockedNumberProvider
  • Se a operadora tiver um app de telefone ou de mensagens, implemente a chamada/mensagem recursos de restrição usando BlockedNumberProvider
  • Os fornecedores de discador e aplicativo de mensagens de terceiros usam BlockedNumberProvider pelos recursos de bloqueio

Recomendações para OEMs

Se o dispositivo nunca foi enviado com nenhuma chamada/mensagem adicional de restrição de acesso, use o recurso de bloqueio de números Project (AOSP) em todos esses dispositivos. É recomendável que a entrada razoável pontos para bloqueio são aceitos, como bloquear um número diretamente da chamada ou em um agrupamento de mensagens.

Se o dispositivo foi enviado com recursos de restrição de chamadas/mensagens, adapte os recursos para que todos os números de telefone de correspondência estrita que são bloqueados sejam armazenados no BlockedNumberProvider, e que o comportamento em torno do provedor atenda aos requisitos para esse recurso descritos no documento de definição de compatibilidade do Android (CDD).

Qualquer outro recurso avançado pode ser implementado usando provedores personalizados e interface do usuário personalizada / controles, desde que os requisitos do CDD sejam atendidos em relação a bloquear números de telefone com correspondência restrita. Recomendamos que esses outros recursos rotulados como recursos "avançados" para evitar confusão com os recurso de bloqueio de números.

APIs

Estas são as APIs em uso:

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

Interface do usuário

A interface do usuário BlockedNumbersActivity.java fornecida no AOSP pode ser usada como o endereço IP interno. Os implementadores de dispositivos também podem implementar a própria versão da interface, desde que ela e atenda aos requisitos do CDD relacionados.

Talvez seja necessário usar o app para PC do parceiro para backup e restauração. implementar a restauração da lista de bloqueio usando BlockedNumberProvider: Confira as imagens abaixo para os anúncios interface de números de telefone fornecida no AOSP.

interface do usuário para blocos de números

Figura 2. Interface do usuário para bloquear números de telefone

Validação

Os implementadores podem garantir que sua versão do recurso funcione conforme o esperado, executando os seguintes testes de CTS:

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

O BlockedNumberProvider pode ser manipulado usando os comandos adb. depois de executar $ adb root. Exemplo:

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