CellBroadcast

O módulo CellBroadcast reduz os esforços repetitivos para OEMs (o que, por sua vez, diminui a fragmentação no ecossistema Android e oferece um comportamento consistente aos usuários finais) e ajuda a simplificar os testes e a certificação da operadora para requisitos relacionados ao CellBroadcast (porque o código não pode ser modificado por OEMs). Esse módulo pode ser atualizado, ou seja, ele pode receber atualizações de funcionalidade fora do ciclo normal de lançamento do Android.

Formato do pacote

O módulo CellBroadcast consiste no seguinte serviço e app.

  • O serviço CellBroadcastService oferece suporte à decodificação de SMS de transmissão celular, geocercas para alerta de emergência sem fio (WEA) 3.0, verificações de duplicação de mensagens e transmissão de mensagens para apps. É um serviço de mensagens de um para muitos com segmentação geográfica e geocercas projetado para entregar mensagens a vários usuários de smartphones em uma área definida ao mesmo tempo. O serviço é definido pelo comitê ETSI GSM, 3GPP e faz parte dos padrões de telecomunicações.

  • O app CellBroadcastReceiver é um app padrão do sistema que processa alertas de emergência e não emergenciais (como alertas âmbar e presidenciais) e apresenta as informações aos usuários finais com base nas regulamentações regionais e da operadora.

Fluxo de mensagens de transmissão celular

A figura a seguir mostra o fluxo de mensagens do CellBroadcast.

Fluxo de mensagens do CellBroadcastReceiver

Figura 1. Fluxo de mensagens do CellBroadcastReceiver

  1. A camada de interface de rádio (RIL) notifica o InBoundSMSHandler sobre um SMS de CellBroadcast CDMA/GSM.

  2. O framework encaminha o SMS de transmissão celular para o módulo CBS para analisar e processar a mensagem recebida.

  3. Depois que a mensagem é processada, o CellBroadcastService encaminha o intent para o app CellBroadcastReceiver padrão do sistema.

  4. O app CellBroadcastReceiver mostra a mensagem ao usuário.

Formato do módulo

O CellBroadcastService e o app CellBroadcastReceiver estão incluídos em um único arquivo APEX (com.android.cellbroadcast), disponível para dispositivos com Android 11 ou versões mais recentes. O módulo inclui código em package/app/CellBroadcastReceiver e migra as classes de framework atuais para packages/modules/CellBroadcastService.

Dependências do módulo

O módulo CellBroadcast interage com o framework usando apenas @SystemApi estáveis (sem APIs @hide) e depende das seguintes bibliotecas estáticas.

  • Androidx.legacy_legacy-support-v13
  • Androidx.recyclerview_recyclerview
  • Androidx.preference_preference
  • androidx.legacy_legacy-preference-v14
  • androidx.appcompat_appcompat

É possível personalizar a configuração usando substituições de recursos de tempo de execução (RROs).

Configuração de permissão

O módulo CellBroadcast é assinado com uma assinatura do Google em vez de uma assinatura da plataforma, o que significa que ele perde o acesso às permissões de assinatura. Em vez disso, o Android 11 define a nova permissão de assinatura com.android.cellbroadcastservice.FULL_ACCESS_CELL_BROADCAST_HISTORY no módulo CellBroadcast. Somente pacotes no módulo podem receber a permissão, já que são assinados com a mesma chave. Essa permissão permite que o app CellBroadcastReceiver tenha acesso total ao banco de dados dentro do CellBroadcastService.

A plataforma concede a permissão de tempo de execução android.permission.READ_CELL_BROADCASTS ao app de SMS padrão do sistema para acessar o histórico de alertas de emergência.

Integrar o módulo CellBroadcast

Esta seção descreve como integrar o módulo CellBroadcast.

Integrar com as configurações

Você pode decidir onde integrar as configurações do CellBroadcast no app Configurações. (Os usuários finais acessam a página de configurações do CellBroadcast em Configurações > Apps e notificações > Avançado > Alerta de emergência). Para iniciar o app CellBroadcastReceiver no app Configurações, mude as seguintes configurações com o nome do pacote com.android.cellbroadcastreceiver.

<!-- Cell broacast receiver package name [DO NOT TRANSLATE] -->
<string name="cell_broadcast_receiver_package">
com.android.cellbroadcastreceiver</string>

Integrar com apps de mensagens

É possível integrar um link de app a apps de mensagens para abrir o histórico de mensagens do CellBroadcast. No app Mensagens do Android, essa opção foi integrada a Configurações > Avançado > Alerta de emergência. Para integrar um link no seu próprio app de mensagens, defina o caminho no app e configure o nome do componente para o módulo CellBroadcast como com.android.cellbroadcastreceiver/com.android.cellbroadcastreceiver.CellBroadcastListActivity.

Integrar com a caixa de entrada de SMS

É possível ativar a exibição de mensagens de CellBroadcast no app de mensagens padrão substituindo a seguinte configuração usando uma sobreposição de recursos de tempo de execução.

<item type="bool" name="enable_write_alerts_to_sms_inbox" />

Como a concessão de permissões está fora do escopo do módulo CellBroadcast, é necessário conceder a permissão AppOpsManager.OP_WRITE_SMS ao módulo CellBroadcast para oferecer suporte de ponta a ponta. Para uma implementação de referência do AOSP, consulte este patch SmsApplication.java.

Iniciar o app CellBroadcastReceiver

O app CellBroadcastReceiver tem os seguintes pontos de inicialização.

  • O menu do app Ajustes.

  • Um app (incluindo apps de terceiros), como um app de mensagens que se vincula ao histórico de mensagens de CellBroadcast.

  • (Opcional) Um ícone de inicialização da tela inicial do Android adicionado pelo OEM. Para mais detalhes, consulte Adicionar um ícone de inicialização.

Configurações do app CellBroadcastReceiver

As capturas de tela a seguir mostram o menu de configurações do app CellBroadcastReceiver.

Menu de configurações do app CellBroadcastReceiver

Figura 2. Menu de configurações do app CellBroadcastReceiver

Histórico de alertas de emergência

Figura 3. Tela do histórico de alertas de emergência

Adicionar ícones de inicialização

É possível ativar o acesso ao histórico de mensagens do CellBroadcast no iniciador de apps e nos seus próprios ícones de inicialização.

  • Para ativar o acesso ao histórico de mensagens na tela de início de apps, substitua a seguinte configuração usando um RRO.

    <item type="bool" name="show_message_history_in_launcher" />
    
  • Para substituir o ícone padrão do AOSP, substitua a seguinte configuração usando uma RRO.

    <!-- Customize launcher icon for cellbroadcast history -->
    <item type="mipmap" name="ic_launcher_cell_broadcast" />
    

Ativar o código secreto do CMAS

Para ativar o código secreto do CMAS, *#*#CMAS#*#* (*#*#2627#*#* no teclado de discagem), um app de discagem precisa detectar o código especial na forma de *#*#code#*#* e processar o código usando o método público sendDialerSpecialCode.

Requisito de informações da área: canal 50

O canal 50 é especial para as operadoras transmitirem informações relacionadas à área, exceto a MTN na África do Sul. Nesse canal, as mensagens de transmissão não resultam em uma caixa de diálogo ou notificação. Em vez disso, as mensagens de transmissão aparecem no status do SIM no menu "Configurações" ou na barra de status (por exemplo, mostrando um CEP).

A implementação do Android CellBroadcastService oferece suporte às seguintes APIs no serviço de transmissão de célula para que os apps Configurações e SysUI recebam as informações do canal 50 de transmissão. Para implementar isso, faça o seguinte:

  • Registre a transmissão android.telephony.action.AREA_INFO_UPDATED e substitua o nome do pacote do receptor config_area_info_receiver_packages usando uma RRO.

  • Vincule a CellBroadcastService.CELL_BROADCAST_SERVICE_INTERFACE.

Como os apps Configurações e SysUI estão fora do escopo do módulo CellBroadcast, implemente as mudanças no SystemUI ou no app Configurações para oferecer suporte de ponta a ponta. Para uma implementação de referência, consulte o app de configurações do CellBroadcastService.

Personalização

Não é possível modificar diretamente o código-fonte do módulo CellBroadcast, mas você pode usar substituições de recursos de tempo de execução (RROs) para ativar (ou desativar) parâmetros (por exemplo, é possível personalizar a cor das notificações e dimensões em caixas de diálogo). Para substituir os valores padrão dos parâmetros usados no módulo CellBroadcast, mude o nome do pacote de destino para com.android.cellbroadcastreceiver. Além disso:

  • Para uma lista de configurações substituíveis, consulte overlayable.xml.

  • Para conferir um exemplo de implementação, consulte RROSampleTestApp no AOSP.

Se a implementação não tiver recursos de tradução de strings da interface ou se as traduções não atenderem às suas expectativas, você poderá substituir os recursos de tradução usando um RRO ou trabalhar com a equipe de tradução do Google para fazer o upstream das traduções de strings para o módulo CellBroadcast. Se você substituir os recursos de tradução, o Google precisará expor essas strings em overlayable.xml para permitir a substituição. Se você precisar de mais configurações para personalização da interface, entre em contato com o grupo de suporte do CellBroadcast.

Migrar dados

O Android 11 inclui um app CellBroadcast legado, que é um mecanismo para preservar e migrar dados de apps (incluindo configurações do usuário e históricos de alertas de emergência) para dispositivos que fazem upgrade para o módulo CellBroadcast. As implementações do Android que usam o módulo CellBroadcast precisam incluir o app CellBroadcast legado no build para migração de dados. Se a implementação usar uma solução personalizada de CellBroadcast, defina um APK CellBroadcastContentProvider para preservar os dados. Você pode remover com segurança o APK de transmissão de célula legada em uma versão posterior.

Em dispositivos atualizados para usar o módulo CellBroadcast, ele busca dados do AOSP LegacyCellBroadcastApp ou do APK CellBroadcastContentProvider definido pelo OEM pela autoridade cellbroadcast-legacy bem definida.

Usar um APK CellBroadcastContentProvider definido pelo OEM

Ao definir um APK CellBroadcastContentProvider, ele precisa seguir estas especificações.

  • O APK é sem interface e mostra apenas o conteúdo do banco de dados e SharedPreferences por um objeto ContentProvider com a autoridade cellbroadcast-legacy. Ele não pode ser acessado por apps de terceiros.

  • O APK é desenvolvido e pertence ao OEM, que pode continuar hospedando o esquema de API oculta.

Para migrar SharedPreferences para o módulo CellBroadcast, o APK CellBroadcastContentProvider precisa ser compatível com o método ContentProvider.call) com os seguintes parâmetros:

  • Responsável: @SystemAPI CellBroadcast.LEGACY_CONTENT_URI
  • Método:@SystemAPI CellBroadcast.CALL_METHOD_GET_PREFERENCE
  • Argumento:@SystemAPI CellBroadcast.Preference

    Esta é uma lista de chaves de preferências compartilhadas compatíveis com o módulo CellBroadcast. Os dados vêm de SharedPreferences para o método ContentProvider.call.

Para migrar o histórico de mensagens para o módulo CellBroadcast, o APK CellBroadcastContentProvider precisa ser compatível com o método ContentProvider.query com os seguintes parâmetros:

  • Autoridade: @SystemAPI CellBroadcast.LEGACY_CONTENT_URI. As colunas de consulta listam as propriedades de mensagem compatíveis com o módulo CellBroadcast. Recebe dados (do seu banco de dados) para o método ContentProvider.query.

Para uma implementação de referência do CellBroadcastContentProvider,, consulte LegacyCellBroadcastContentProvider.

Teste

O Teste de compatibilidade do Android (CTS, na sigla em inglês) verifica a funcionalidade das APIs do sistema dependentes de apps. Você também pode executar o módulo CellBroadcast unit tests/testappsp.

Se o OEM ativou o código secreto do CMAS para um dispositivo, ele pode oferecer suporte ao modo de depuração com os seguintes recursos.

  • Os alertas de teste são agrupados em Outros alertas com um botão de ativação/desativação.

  • O histórico inclui todas as mensagens recebidas, mas não exibidas, como mensagens duplicadas ou em outro idioma.

  • As mensagens mostram todos os parâmetros disponíveis, incluindo número de série, ID da mensagem e data de expiração.

Para ativar o modo de depuração, disque *#*#CMAS#*#* no discador.

Contato

Para mais detalhes ou dúvidas sobre o módulo CellBroadcast, entre em contato com o grupo de suporte do CellBroadcast.