Compatibilidade com aplicativos de chamadas de terceiros

O Android 9 fornece APIs para oferecer melhor suporte a aplicativos de chamada de terceiros (3P). Os aplicativos de chamadas 3P normalmente dependem de APIs de telefonia, como a transmissão PHONE_STATE , para coexistir com as chamadas telefônicas da operadora. Como consequência, os aplicativos de chamadas 3P devem dar prioridade às chamadas da operadora e geralmente recorrem à rejeição silenciosa de chamadas recebidas no aplicativo ou ao encerramento de uma chamada em andamento para abrir caminho para uma chamada da operadora.

As APIs no Android 9 são compatíveis com cenários de chamadas simultâneas entre aplicativos 3P e chamadas de operadora. Isso possibilita, por exemplo, receber uma chamada 3P de entrada enquanto estiver em uma chamada de operadora. A estrutura assume a responsabilidade de garantir que a chamada da operadora seja realizada quando o usuário se envolver na chamada 3P.

No Android 9, os aplicativos de chamada 3P são incentivados a implementar a API ConnectionService autogerenciada. Para obter mais informações sobre como criar um aplicativo de chamada usando essa API, consulte Criar um aplicativo de chamada .

A API ConnectionService autogerenciada também oferece aos desenvolvedores a oportunidade de optar por ter chamadas em seu aplicativo registradas no log de chamadas do sistema (consulte EXTRA_LOG_SELF_MANAGED_CALLS ). De acordo com os requisitos do Documento de definição de compatibilidade do Android (CDD) (seção 7.4.1.2), você deve garantir que seu aplicativo de discagem/telefone exiba essas entradas de registro de chamadas e mostre o nome do aplicativo de chamada 3P onde a chamada foi originada (para um exemplo de como o aplicativo de discagem AOSP atende a esse requisito, consulte Entradas de registro de chamadas de aplicativos de chamada 3P ).

Os aplicativos são responsáveis ​​por definir CAPABILITY_SUPPORT_HOLD e CAPABILITY_HOLD nas conexões de seus aplicativos. No entanto, é possível que um aplicativo não possa reter uma chamada em algumas circunstâncias. A estrutura inclui disposições para resolver esses tipos de casos.

Cenários

Você deve modificar seu aplicativo de discagem para lidar com os seguintes cenários.

Lidar com chamadas recebidas que desconectam uma chamada em andamento

Em um cenário em que há uma chamada 3P em andamento (por exemplo, em uma chamada SuperCaller) que não suporta espera, e o usuário recebe uma chamada móvel (por exemplo, através de sua operadora FooCom), seu aplicativo Discador/Telefone deve indicar ao usuário que atender a chamada de rede móvel encerrará a chamada 3P em andamento.

Essa experiência do usuário é importante, pois um aplicativo de chamada 3P pode ter uma chamada em andamento que não pode ser mantida pela estrutura. Atender uma nova chamada móvel faz com que a chamada 3P em andamento seja desconectada.

Veja a interface do usuário abaixo para obter um exemplo:

Chamada de entrada desconectando uma chamada 3P em andamento
Figura 1. Chamada de entrada que desconecta uma chamada 3P em andamento

Seu aplicativo de discagem pode verificar se uma chamada recebida faz com que outra chamada seja desconectada verificando os extras de chamada . Certifique-se de que EXTRA_ANSWERING_DROPS_FG_CALL esteja definido como TRUE e EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME esteja definido como o nome do aplicativo cuja chamada é desconectada ao atender a chamada móvel recebida.

Entradas de registro de chamadas de aplicativos de chamada 3P

Os desenvolvedores de aplicativos de chamada 3P podem optar por ter chamadas em seu aplicativo registradas no log de chamadas do sistema (consulte EXTRA_LOG_SELF_MANAGED_CALLS ). Isso significa que é possível ter entradas no registro de chamadas que não sejam para chamadas de rede móvel.

Quando o aplicativo de discagem AOSP exibe entradas de registro de chamadas relacionadas a um aplicativo de chamada 3P, o ​​nome do aplicativo em que a chamada ocorreu é exibido no registro de chamadas, conforme ilustrado abaixo:

Entrada de registro de chamadas com aplicativo de chamada 3P
Figura 2. Entrada de registro de chamadas com o nome do aplicativo de chamada 3P no aplicativo de discagem

Para determinar o nome de um aplicativo associado a uma entrada de registro de chamadas, use as colunas PHONE_ACCOUNT_COMPONENT_NAME e PHONE_ACCOUNT_ID no provedor de registro de chamadas para criar uma instância de PhoneAccountHandle , que identifica a origem de uma entrada de registro de chamadas. Consulte o TelecomManager para obter os detalhes da PhoneAccount.
Para determinar se uma entrada de registro de chamadas é de um aplicativo de chamada 3P, verifique os recursos do PhoneAccount para ver se CAPABILITY_SELF_MANAGED está definido.

O método getLabel do PhoneAccount retornado retorna o nome do aplicativo associado a uma entrada de registro de chamadas do aplicativo de chamada 3P.

Validação

Para testar se seu dispositivo oferece suporte a aplicativos de chamada 3P, use o aplicativo de teste Telecomm, que implementa a API ConnectionService autogerenciada. O aplicativo está localizado em /packages/services/Telecomm/testapps/ .

  1. Crie o aplicativo de teste a partir da raiz do repositório de origem do Android usando:

    mmma packages/services/Telecomm/testapps/

  2. Instale o apk de compilação usando adb install -g -r <apk path> . Um ícone de Amostra Autogerenciada é então adicionado ao seu inicializador.

  3. Toque no ícone para abrir o aplicativo de teste.

Lidar com chamadas recebidas que desconectam uma chamada em andamento

Siga estas etapas para verificar se uma chamada recebida desconecta uma chamada 3P em andamento.

Aplicativo de teste para aplicativos de chamada 3P
Figura 3. Aplicativo de teste com implementações de amostra da API ConnectionService autogerenciada
  1. Desmarque a opção Holdable .
  2. Toque em SAÍDA para iniciar uma nova chamada de saída de amostra.
  3. Toque no botão ATIVO para ativar a chamada.
  4. Ligue para o número de telefone do dispositivo em teste com outro telefone. Isso invoca o cenário em que seu discador recebe o nome de um aplicativo, que terá sua chamada desconectada.
  5. Quando terminar, toque no botão DESCONECTAR no aplicativo de teste.

Entradas de registro de chamadas de aplicativos de chamada 3P

Depois de concluir as etapas acima, o aplicativo de teste deve ter registrado uma chamada no registro de chamadas do sistema. Para confirmar se o dispositivo registra chamadas de aplicativos de chamadas 3P, abra seu aplicativo de discagem e confirme se a chamada aparece no registro de chamadas do sistema.