Transmissão Celular

O módulo CellBroadcast reduz esforços repetitivos para OEMs (o que, por sua vez, reduz a fragmentação em todo o ecossistema Android e fornece um comportamento consistente para os usuários finais) e ajuda a otimizar o teste e a certificação da operadora para requisitos relacionados ao CellBroadcast (porque o código não pode ser modificado pelos OEMs ). Este módulo é atualizável, o que significa que pode receber atualizações de funcionalidades fora do ciclo normal de lançamento do Android.

Formato do pacote

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

  • O serviço CellBroadcastService oferece suporte à decodificação CellBroadcast SMS, geofencing para alerta de emergência sem fio (WEA) 3.0, verificações de duplicação de mensagens e transmissão de mensagens para aplicativos. É um serviço de mensagens com segmentação geográfica e cerca geográfica de um para muitos, projetado para entregar mensagens a vários usuários de telefones celulares, 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 aplicativo CellBroadcastReceiver é um aplicativo de sistema padrão que lida com 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 CellBroadcast

A figura a seguir mostra o fluxo de mensagens CellBroadcast.

Fluxo de mensagens do CellBroadcastReceiver

Figura 1. Fluxo de mensagens do CellBroadcastReceiver

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

  2. A estrutura encaminha o CellBroadcast SMS para o módulo CBS para analisar e processar a mensagem recebida.

  3. Depois que a mensagem é processada, CellBroadcastService encaminha a intenção para o aplicativo CellBroadcastReceiver padrão do sistema.

  4. O aplicativo CellBroadcastReceiver exibe a mensagem para o usuário.

Formato do módulo

O CellBroadcastService e o aplicativo CellBroadcastReceiver estão incluídos em um único arquivo APEX ( com.google.android.cellbroadcast ), que está disponível para dispositivos com Android 11 ou superior. O módulo inclui código em package/app/CellBroadcastReceiver e migra classes de framework existentes para packages/modules/CellBroadcastService .

Dependências do módulo

O módulo CellBroadcast interage com a estrutura 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

Você pode personalizar a configuração usando sobreposiçõ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 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; apenas os pacotes no módulo podem obter a permissão, pois são assinados com a mesma chave. Essa permissão permite que o aplicativo 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 aplicativo SMS padrão do sistema para acessar o histórico de alertas de emergência.

Integrando o módulo CellBroadcast

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

Integração com configurações

Você pode decidir onde integrar as configurações do CellBroadcast no aplicativo Configurações (os usuários finais acessam a página de configurações do CellBroadcast em Configurações > Aplicativos e notificações > Avançado > Alerta de emergência ). Para iniciar o aplicativo CellBroadcastReceiver a partir do aplicativo Configurações, altere as configurações de configuração a seguir com o nome do pacote com.google.android.cellbroadcastreceiver .

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

Integração com aplicativos de mensagens

Você pode integrar um link de aplicativo em aplicativos de mensagens para abrir o histórico de mensagens do CellBroadcast. No aplicativo Android Messaging, isso foi integrado em Configurações > Avançado > Alerta de emergência . Para integrar um link em seu próprio aplicativo de mensagens, defina o caminho no aplicativo de mensagens e configure o nome do componente para o módulo CellBroadcast como com.google.android.cellbroadcastreceiver/com.android.cellbroadcastreceiver.CellBroadcastListActivity .

Integração com caixa de entrada SMS

Você pode habilitar a exibição de mensagens CellBroadcast no aplicativo de mensagens padrão substituindo a configuração a seguir 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, você deve conceder a permissão AppOpsManager.OP_WRITE_SMS ao módulo CellBroadcast para fornecer suporte de ponta a ponta. Para uma implementação de referência AOSP, consulte este patch SmsApplication.java .

Iniciando o aplicativo CellBroadcastReceiver

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

  • O menu do aplicativo Configurações.

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

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

Configurações do aplicativo CellBroadcastReceiver

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

Menu de configurações do aplicativo CellBroadcastReceiver

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

Histórico de alertas de emergência

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

Adicionando ícones de inicialização

Você pode habilitar o acesso ao histórico de mensagens do CellBroadcast no inicializador de aplicativos e por meio de seus próprios ícones de inicialização.

  • Para habilitar o acesso ao histórico de mensagens do inicializador de aplicativos, substitua a configuração a seguir 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" />
    

Ativando o código secreto do CMAS

Para habilitar o código secreto do CMAS, *#*#CMAS#*#* ( *#*#2627#*#* no teclado de discagem), um aplicativo de discagem deve escutar o código de discagem especial na forma de *#*# code #*#* e manipule o código usando o método público sendDialerSpecialCode .

Requisito de informações de área: Canal 50

O Canal 50 é um canal especial para as operadoras transmitirem informações relacionadas à área (exceto MTN na África do Sul). Para este canal, as mensagens transmitidas não resultam em uma caixa de diálogo pop-up ou notificação. Em vez disso, as mensagens de difusão aparecem no status do SIM do menu Configurações ou na barra de status (por exemplo, exibindo um CEP).

A implementação do Android CellBroadcastService oferece suporte para as seguintes APIs no serviço de transmissão celular para os aplicativos Configurações e SysUI para obter 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 receptor config_area_info_receiver_packages por meio de um RRO.

  • Vincular a CellBroadcastService.CELL_BROADCAST_SERVICE_INTERFACE .

Como os aplicativos Configurações e SysUI estão fora do escopo do módulo CellBroadcast, você deve implementar suas alterações no SystemUI ou no aplicativo Configurações para fornecer suporte completo. Para uma implementação de referência, consulte o aplicativo CellBroadcastService Settings .

Personalização

Você não pode modificar diretamente o código-fonte do módulo CellBroadcast, mas pode usar sobreposições de recursos de tempo de execução (RROs) para habilitar (ou desabilitar) parâmetros (por exemplo, você pode personalizar a cor das notificações e dimensões nas caixas de diálogo). Para substituir os valores padrão dos parâmetros usados ​​no módulo CellBroadcast, altere o nome do pacote de destino para com.google.android.cellbroadcastreceiver . Além disso:

  • Para obter uma lista de configurações sobrepostas, consulte overlayable.xml .

  • Para obter um exemplo de implementação, consulte RROSampleTestApp em AOSP.

Se a implementação não tiver recursos de tradução de strings da interface do usuário 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 upstream das traduções de strings para o módulo CellBroadcast. Se você substituir os recursos de tradução, o Google deverá expor essas strings em overlayable.xml para permitir a substituição. Se você precisar de mais configurações para personalização da interface do usuário, entre em contato com o grupo de suporte CellBroadcast .

Migrando dados

O Android 11 inclui um aplicativo CellBroadcast legado, que é um mecanismo para preservar e migrar dados do aplicativo (incluindo configurações do usuário e históricos de alertas de emergência) para dispositivos atualizados para o módulo CellBroadcast. As implementações do Android que usam o módulo CellBroadcast devem incluir o aplicativo CellBroadcast legado em sua compilação para migração de dados. Se sua implementação usa uma solução CellBroadcast personalizada, você deve definir um APK CellBroadcastContentProvider para preservar os dados (você pode remover com segurança o APK de transmissão celular herdado em uma versão subsequente).

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

Usando um APK CellBroadcastContentProvider definido pelo OEM

Ao definir um APK CellBroadcastContentProvider, o APK deve seguir essas especificações.

  • O APK é um APK headless que exibe apenas o conteúdo de seu banco de dados e SharedPreferences por meio de um objeto ContentProvider com a autoridade cellbroadcast-legacy e não pode ser acessado por aplicativos de terceiros.

  • O APK é desenvolvido e de propriedade do OEM, onde o OEM pode continuar hospedando seu esquema de API oculto.

Para migrar SharedPreferences para o módulo CellBroadcast, o APK CellBroadcastContentProvider deve 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étodo ContentProvider.call .

Para migrar o histórico de mensagens para o módulo CellBroadcast, o APK CellBroadcastContentProvider deve 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 suportadas para o módulo CellBroadcast. Recebe dados (do seu banco de dados) para o método ContentProvider.query .

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

Teste

O Android Compatibility Test Suite (CTS) verifica a funcionalidade das APIs do sistema dependentes do aplicativo. Você também pode executar unit tests/testappsp .

Se o OEM tiver ativado o código secreto do CMAS para um dispositivo, esse dispositivo poderá 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 liga/desliga.

  • 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 número de série, ID da mensagem e data de validade.

Para habilitar 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 CellBroadcast .