O módulo CellBroadcast reduz os esforços repetitivos para OEMs, o que, por sua vez, diminui a fragmentação no ecossistema do Android e oferece um comportamento consistente aos usuários finais. Além disso, ele simplifica os testes de operadora e a certificação para requisitos relacionados ao CellBroadcast, porque o código não pode ser modificado por OEMs. Esse módulo é atualizável, ou seja, ele pode receber atualizações de funcionalidade fora do ciclo normal de lançamentos do Android.
Formato do pacote
O módulo CellBroadcast consiste no serviço e no app a seguir.
O serviço CellBroadcastService oferece suporte à decodificação de SMS do CellBroadcast, à delimitação geográfica para alerta de emergência sem fio (WEA) 3.0, às verificações de duplicação de mensagens e à transmissão de mensagens para apps. É um serviço de mensagens geolocalizado e com cerca geográfica projetado para enviar mensagens a vários usuários de smartphones, em uma área definida, ao mesmo tempo. O serviço é definido pelo comitê GSM do ETSI, 3GPP e faz parte dos padrões de telecomunicações.
O app CellBroadcastReceiver é um app de sistema padrão que processa alertas de emergência e não emergenciais (como alertas de alerta laranja e presidencial) e apresenta as informações aos usuários finais com base nas regulamentações regionais e da operadora.
Fluxo de mensagens da CellBroadcast
A figura a seguir mostra o fluxo de mensagens da CellBroadcast.
Figura 1. Fluxo de mensagens de CellBroadcastReceiver
A camada de interface de rádio (RIL) notifica
InBoundSMSHandler
sobre um SMS CellBroadcast CDMA/GSM.O framework encaminha o SMS do CellBroadcast ao módulo da CBS para analisar e processar a mensagem recebida.
Depois que a mensagem é processada, o CellBroadcastService encaminha a intent para o app CellBroadcastReceiver padrão do sistema.
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
), que está disponível para dispositivos com
Android 11 ou mais recente. O módulo inclui o código em
package/app/CellBroadcastReceiver
e migra as classes do framework para
packages/modules/CellBroadcastService
.
Dependências de módulo
O módulo CellBroadcast interage com o framework usando apenas @SystemApi
estável (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 sobreposições de recursos no ambiente de execução (RROs, na sigla em inglês).
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 o módulo 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
dentro do módulo CellBroadcast. Somente pacotes no módulo podem receber a
permissão, porque eles são assinados com a mesma chave. Essa permissão autoriza o
app CellBroadcastReceiver, acesso total ao banco de dados dentro do
CellBroadcastService.
A plataforma concede a permissão de execução android.permission.READ_CELL_BROADCASTS
ao app padrão de SMS 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
É possível 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
Você pode integrar um link de app a apps de mensagens para abrir o histórico de mensagens do CellBroadcast. No app Mensagens para Android, isso foi integrado a
Configurações > Avançado > Alerta de emergência. Para integrar um link no
seu próprio app de mensagens, defina o caminho nesse 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 transmissão de rede no app de mensagens padrão substituindo a configuração a seguir usando uma sobreposição de recurso 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 fornecer suporte completo. 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 início.
Menu do app "Configurações".
Um app (incluindo apps de terceiros), como um app de mensagens que vincula o histórico de mensagens do CellBroadcast.
(Opcional) Um ícone de inicialização da tela inicial do Android adicionado pelo OEM. Para ver mais detalhes, consulte Como 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.
Figura 2. Menu de configurações do app CellBroadcastReceiver
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 no app launcher, 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 configuração a seguir usando um RRO.
<!-- Customize launcher icon for cellbroadcast history --> <item type="mipmap" name="ic_launcher_cell_broadcast" />
Ativar o código secreto 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 de discagem 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 é um canal especial para operadoras transmitirem informações relacionadas à área (exceto MTN na África do Sul). Para esse 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 são exibidas no status do SIM do menu "Configurações" ou na barra de status (por exemplo, mostrando um código postal).
A implementação do CellBroadcastService do Android oferece suporte às seguintes APIs no serviço de transmissão de célula para que os apps de 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 receptorconfig_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, é necessário implementar as mudanças no SystemUI ou no app Configurações para oferecer suporte completo. Para uma implementação de referência, consulte o app Configurações do CellBroadcastService.
Personalização
Não é possível modificar diretamente o código-fonte do módulo CellBroadcast, mas
é possível usar sobreposições de recursos de execução
(RROs, na sigla em inglês) 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 conferir uma lista de configurações sobrepostas, 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 string 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 enviar
as traduções de string 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 personalizar a 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 estão fazendo 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 a migração de dados. Se a implementação usar uma solução CellBroadcast personalizada, defina um APK CellBroadcastContentProvider para preservar os dados. Você pode remover com segurança o APK de transmissão celular legada em uma versão posterior.
Em dispositivos atualizados para usar o módulo CellBroadcast, o módulo extrai dados
do LegacyCellBroadcastApp do AOSP 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 é um headless que mostra apenas o conteúdo do banco de dados e o
SharedPreferences
por um objetoContentProvider
com a autoridadecellbroadcast-legacy
e não é acessível a apps de terceiros.O APK é desenvolvido e pertence ao OEM, que pode continuar hospedando o esquema de API oculto.
Para migrar SharedPreferences
para o módulo CellBroadcast, o
APK CellBroadcastContentProvider precisa oferecer suporte ao método
ContentProvider.call
com os seguintes parâmetros:
- Autoridade:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
- Método:
@SystemAPI CellBroadcast.CALL_METHOD_GET_PREFERENCE
Arg:
@SystemAPI CellBroadcast.Preference
Esta é uma lista de chaves de preferência compartilhadas com suporte para o módulo CellBroadcast. Os dados vêm de
SharedPreferences
para o métodoContentProvider.call
.
Para migrar o histórico de mensagens para o módulo CellBroadcast, o
APK CellBroadcastContentProvider precisa oferecer suporte ao método
ContentProvider.query
com os seguintes parâmetros:
- Autoridade:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI
. As colunas de consulta listam as propriedades de mensagem com suporte para o módulo CellBroadcast. Recebe dados (do seu banco de dados) para o métodoContentProvider.query
.
Para uma implementação de referência de 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. Também é possível 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 recursos a seguir.
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 exibem todos os parâmetros disponíveis, incluindo o número de série, o ID da mensagem e a data de validade.
Para ativar o modo de depuração, disque *#*#CMAS#*#* no discador.
Contato
Para mais detalhes ou perguntas sobre o módulo CellBroadcast, entre em contato com o grupo de suporte do CellBroadcast.