O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Implementando IMS

Android 9 introduz uma nova interface SystemApi chamado ImsService para ajudar a implementar IP Multimedia Subsystem (IMS). A API ImsService é uma interface bem definida entre a plataforma Android e uma implementação IMS fornecida por um fornecedor ou operadora.

Visão geral do ImsService

Figura 1. Visão geral ImsService

Ao usar a interface ImsService, o implementador IMS pode fornecer informações de sinalização importantes para a plataforma, como informações de registro IMS, integração de SMS sobre IMS e integração de recursos MmTel para fornecer chamadas de voz e vídeo. A API ImsService também é uma API do sistema Android, o que significa que pode ser construída no Android SDK diretamente, em vez de na origem. Um aplicativo IMS que foi pré-instalado no dispositivo também pode ser configurado para ser atualizável pela Play Store.

Exemplos e fonte

O Android fornece um aplicativo no AOSP que implementa partes da API ImsService para fins de teste e desenvolvimento. Você pode encontrar o aplicativo na / testapps / ImsTestService .

Você pode encontrar a documentação da API ImsService em ImsService e nas outras classes da API.

Implementação

A API ImsService é uma API de alto nível que permite implementar IMS de várias maneiras, dependendo do hardware disponível. Por exemplo, a implementação muda dependendo se a implementação do IMS está totalmente no processador do aplicativo ou se está parcial ou totalmente descarregada para o modem. O Android não fornece um HAL público para descarregar para o processador de banda base, portanto, qualquer descarregamento deve ocorrer usando sua extensão HAL para o modem.

Compatibilidade com implementações IMS mais antigas

Embora o Android 9 inclua a API ImsService, os dispositivos que usam uma implementação mais antiga para IMS não são capazes de oferecer suporte à API. Para esses dispositivos, as interfaces mais velhos AIDL e classes de mensagens publicitárias foram movidos para o android.telephony.ims.compat namespace. Ao atualizar para o Android 9, os dispositivos mais antigos devem fazer o seguinte para continuar o suporte da API mais antiga.

  • Alterar o namespace da implementação ImsService para estender a partir do android.telephony.ims.compat API namespace.
  • Modificar a definição de serviço ImsService em AndroidManifest.xml usar o android.telephony.ims.compat.ImsService ação de intenção de filtro, em vez do android.telephony.ims.ImsService ação.

O quadro irá então ligar ao ImsService usando a camada de compatibilidade previsto no Android 9 ao trabalho com o legado ImsService implementação.

Registro ImsService com a estrutura

A API ImsService é implementada como um serviço, ao qual a estrutura Android se liga para se comunicar com a implementação IMS. Três etapas são necessárias para registrar um aplicativo que implementa um ImsService com a estrutura. Primeiro, a implementação ImsService deve registrar-se com a plataforma usando o AndroidManifest.xml do pedido; segundo, deve definir quais recursos IMS a implementação suporta (MmTel ou RCS); e terceiro, deve ser verificado como a implementação IMS confiável na configuração da operadora ou na sobreposição do dispositivo.

Definição de serviço

A aplicação IMS registra um ImsService com o quadro, adicionando um service entrada no manifesto usando o seguinte formato:

<service
    android:name="com.egcorp.ims.EgImsService"
    android:directBootAware="true"
    Android:persistent="true"
    ...
    android:permission="android.permission.BIND_IMS_SERVICE" >
    ...
    <intent-filter>
        <action android:name="android.telephony.ims.ImsService" />
    </intent-filter>
</service>

O service definição em AndroidManifest.xml define os seguintes atributos, que são necessários para o funcionamento correto:

  • directBootAware="true" : Permite que o serviço a ser descoberto e executado por telephony antes que o usuário desbloqueia o dispositivo. O serviço não pode dispositivo de acesso criptografado de armazenamento antes que o usuário desbloqueia o dispositivo. Para mais informações, consulte o modo de Apoio Directo inicialização e criptografia com base em arquivo .
  • persistent="true" : Permite que este serviço seja executado de forma persistente e não ser morto pelo sistema de memória de recuperação. Este atributo funciona SOMENTE se o aplicativo for construído como um aplicativo do sistema.
  • permission="android.permission.BIND_IMS_SERVICE" : Garante que só um processo que teve o BIND_IMS_SERVICE permissão concedida a ele pode ligar para a aplicação. Isso evita que um aplicativo invasor se vincule ao serviço, uma vez que apenas aplicativos do sistema podem receber permissão da estrutura.

O serviço também deve especificar a intent-filter elemento com a ação android.telephony.ims.ImsService . Isso permite que o quadro para encontrar a ImsService .

Especificação de recurso IMS

Depois que o ImsService foi definido como um serviço Android em AndroidManifest.xml, o ImsService deve definir quais recursos IMS ele suporta. O Android atualmente oferece suporte aos recursos MmTel e RCS, no entanto, apenas o MmTel está integrado ao framework. Embora não haja APIs RCS integradas à estrutura, ainda há vantagens em declará-la como um recurso do ImsService.

Abaixo estão as características válidas definidas no android.telephony.ims.ImsFeature que um ImsService pode fornecer e uma explicação e exemplo de por que uma aplicação IMS gostaria de implementar uma ou todas estas características. Depois de cada recurso é definido, esta página descreve como a ImsService declara o conjunto de características que define para cada slot SIM.

FEATURE_MMTEL

Os ImsService implementa o recurso IMS MMTel, que contém suporte para todas as mídias IMS (IR.92 e IR.94 especificações), exceto de emergência anexar ao IMS PDN para chamadas de emergência. Qualquer implementação de ImsService que deseja apoiar as características MMTel deve estender a android.telephony.ims.MmTelFeature classe base e retornar um costume MmTelFeature implementação em ImsService#createMmTelFeature .

FEATURE_EMERGENCY_MMTEL

Declarar esse recurso apenas sinaliza para a plataforma que a conexão de emergência ao IMS PDN para serviços de emergência é possível. Se este recurso não é declarada para o seu ImsService , a plataforma será sempre padrão para Circuit Switch Fallback para serviços de emergência. O FEATURE_MMTEL recurso deve ser definido para esta função a ser definida.

FEATURE_RCS

A API ImsService não implementa todas as características IMS RCS, mas o android.telephony.ims.RcsFeature classe base ainda pode ser útil. O quadro se liga automaticamente para o ImsService e chama ImsService#createRcsFeature quando detecta que o pacote deve fornecer RCS. Se o cartão SIM associado com o serviço RCS é removido, o quadro chama automaticamente RcsFeature#onFeatureRemoved e depois limpa a ImsService associado com o recurso RCS. Essa funcionalidade pode remover parte da lógica de detecção / vinculação personalizada que um recurso RCS teria de fornecer.

Registro de recursos suportados

O quadro de telefonia primeiros liga-se ao ImsService para consultar as características que ele suporta usando o ImsService#querySupportedImsFeatures API. Após as calcula-quadro que apresenta o ImsService apoiará, ele irá chamar ImsService#create[...]Feature para cada característica que o ImsService será responsável por. Se as características que as IMS aplicativo suporta mudanças, você pode usar ImsService#onUpdateSupportedImsFeatures para sinalizar o quadro para recalcular recursos suportados. Consulte o diagrama abaixo para obter mais informações sobre a inicialização e vinculação do ImsService.

Inicializando e vinculando ImsService

Figura 2: inicialização e ImsService ligao

Detecção de estrutura e verificação de uma implementação ImsService

Uma vez que o ImsService foi definido corretamente em AndroidManifest.xml, a plataforma deve ser configurada para se ligar (com segurança) ao ImsService quando apropriado. Existem dois tipos de ImsServices aos quais a estrutura se liga:

  1. Operadora "substituir" ImsService: Esses ImsServices são pré-carregados no dispositivo, mas são anexados a uma ou mais operadoras de celular e só serão vinculados quando um cartão SIM correspondente for inserido. Isso é configurado usando o
  2. Dispositivo ImsService "padrão": este é o ImsService padrão que é carregado no dispositivo por um OEM e deve ser projetado para fornecer serviços IMS em todas as situações quando uma operadora ImsService não está disponível e é útil em situações onde o dispositivo não tem cartão SIM inserido ou o cartão SIM inserido não tem uma operadora ImsService instalado com ele. Isso é definido na sobreposição do dispositivo usando as seguintes configurações:

O Android não oferece suporte a aplicativos com implementações de ImsService para download de terceiros, portanto, quaisquer implementações de ImsService definidas aqui devem ser aplicativos do sistema e devem residir na pasta / system / priv-app / ou / product / priv-app / para conceder o apropriado permissões (ou seja, telefone, microfone, localização, câmera e permissões de contatos). Ao verificar se o nome do pacote da implementação do IMS corresponde ao CarrierConfig ou aos valores de sobreposição do dispositivo definidos acima, apenas aplicativos confiáveis ​​pré-instalados são vinculados.

Costumização

Os aplicativos que implementam um ImsService são vinculados apenas aos dispositivos onde são configurados como a operadora "sobrescrever" ImsService ou as configurações ImsService "padrão" do dispositivo para a funcionalidade MMTEL ou RCS. O ImsService também permite que o IMS características que ele suporta (MMTel e RCS) para ser ativado ou desativado de forma dinâmica através de atualizações usando o ImsService#onUpdateSupportedImsFeatures método. Isso aciona a estrutura para recalcular quais ImsServices estão vinculados e quais recursos eles suportam. Se o aplicativo IMS atualizar a estrutura sem recursos suportados, o ImsService será desvinculado até que o telefone seja reinicializado ou um novo cartão SIM seja inserido que corresponda ao aplicativo IMS.

Prioridade de vinculação para vários ImsService

A estrutura não oferece suporte à vinculação a todos os ImsServices possíveis que são pré-carregados no dispositivo e se vincularão a até dois ImsServices por slot SIM (um ImsService para cada recurso) na seguinte ordem por recurso:

  1. O nome do pacote ImsService definido pelo valor CarrierConfig config_ims_[mmtel/rcs]_package_override_string quando houver um cartão SIM inserido.
  2. O nome do pacote ImsService definido no valor de sobreposição dispositivo para config_ims_[mmtel/rcs]_package incluindo o caso em que não existe cartão SIM inserido. Este ImsService DEVE oferecer suporte ao recurso Emergency MmTel.

Você deve ter o nome do pacote do seu ImsService definido no CarrierConfig para cada uma das operadoras que usarão esse pacote ou na sobreposição do dispositivo se o seu ImsService for o padrão, conforme definido acima.

Vamos decompô-lo para cada recurso. Para um dispositivo (único ou multi-SIM) com um único cartão SIM carregado, dois recursos IMS são possíveis: MMTel e RCS. A estrutura tentará vincular na ordem definida acima para cada recurso e se o recurso não estiver disponível para o ImsService definido na substituição da configuração da operadora, a estrutura retornará ao seu ImsService padrão. Portanto, por exemplo, a tabela abaixo descreve qual recurso IMS a estrutura usará, dados três aplicativos IMS que implementam ImsServices instalados em um sistema com os seguintes recursos:

  • A operadora A ImsService oferece suporte a RCS
  • Carrier B ImsService oferece suporte a RCS e MMTel
  • OEM ImsService suporta RCS e MMTel
Cartão SIM inserido Recurso RCS Recurso MMTel
Transportadora A Transportadora A OEM
Carrier B Carrier B Carrier B
Sem SIM OEM OEM

Validação

As ferramentas para verificar a implementação do próprio IMS não estão incluídas, uma vez que as especificações do IMS são extremamente grandes e usam equipamento de verificação especial. Os testes podem apenas verificar se a estrutura de telefonia responde adequadamente à API ImsService.