O Android 9 fornece APIs para oferecer melhor suporte a aplicativos de chamadas 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 muitas vezes recorrer à 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 oferecem suporte a cenários de chamadas simultâneas entre aplicativos de terceiros e chamadas de operadora. Isso torna possível, por exemplo, receber uma chamada 3P enquanto estiver em uma chamada da operadora. A estrutura assume a responsabilidade de garantir que a chamada da operadora seja retida quando o usuário realiza a chamada 3P.
No Android 9, os aplicativos de chamada de terceiros 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 seus aplicativos 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 discador/telefone exiba essas entradas de registro de chamadas e mostre o nome do aplicativo de chamada 3P onde a chamada foi originada (por exemplo, como o aplicativo discador 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 consiga reter uma chamada em algumas circunstâncias. O quadro inclui disposições para a resolução deste tipo de casos.
Cenários
Você deve modificar seu aplicativo discador para lidar com os seguintes cenários.
Tratamento de chamadas recebidas que desconectam uma chamada em andamento
Em um cenário onde 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 porque um aplicativo de chamada 3P pode ter uma chamada em andamento que não pode ser retida pela estrutura. Atender uma nova chamada móvel faz com que a chamada 3P em andamento seja desconectada.
Veja um exemplo da interface do usuário abaixo:
![Chamada recebida desconectando uma chamada 3P em andamento](https://source.android.com/static/docs/core/connect/images/incoming-call-3p-call-app.png?authuser=5&hl=pt)
Seu aplicativo discador pode verificar se uma chamada recebida faz com que outra chamada seja desconectada, verificando os extras da 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 chamadas 3P
Os desenvolvedores de aplicativos de chamadas 3P podem optar por ter chamadas em seus aplicativos registradas no registro de chamadas do sistema (consulte EXTRA_LOG_SELF_MANAGED_CALLS
). Isto significa que é possível ter entradas no registo de chamadas que não sejam para chamadas de rede móvel.
Quando o aplicativo discador AOSP exibe entradas de registro de chamadas relacionadas a um aplicativo de chamadas 3P, o nome do aplicativo onde a chamada ocorreu é exibido no registro de chamadas, conforme ilustrado abaixo:
![Entrada de registro de chamadas com aplicativo de chamada 3P](https://source.android.com/static/docs/core/connect/images/call-log-entry-3p.png?authuser=5&hl=pt)
Para determinar o nome de um aplicativo associado a uma entrada de log de chamadas, use as colunas PHONE_ACCOUNT_COMPONENT_NAME
e PHONE_ACCOUNT_ID
no provedor de log de chamadas para criar uma instância de PhoneAccountHandle
, que identifica a origem de uma entrada de log de chamadas. Consulte TelecomManager
para obter os detalhes da PhoneAccount.
Para determinar se uma entrada de registro de chamadas é de um aplicativo de chamadas 3P, verifique os recursos 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 chamadas 3P, use o aplicativo de teste Telecomm, que implementa a API ConnectionService autogerenciada. O aplicativo está localizado em /packages/services/Telecomm/testapps/
.
Crie o aplicativo de teste a partir da raiz do repositório de origem do Android usando:
mmma packages/services/Telecomm/testapps/
Instale o apk de compilação usando
adb install -g -r <apk path>
. Um ícone de amostra autogerenciada é então adicionado ao seu inicializador.Toque no ícone para abrir o aplicativo de teste.
Tratamento de 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 chamadas 3P](https://source.android.com/static/docs/core/connect/images/test-app-3p-call.png?authuser=5&hl=pt)
- Desmarque a opção Holdable .
- Toque em SAÍDA para iniciar um novo exemplo de chamada.
- Toque no botão ATIVO para ativar a chamada.
- 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.
- Quando terminar, toque no botão DESCONECTAR no aplicativo de teste.
Entradas de registro de chamadas de aplicativos de chamadas 3P
Depois de concluir as etapas acima, o aplicativo de teste deverá ter registrado uma chamada no log de chamadas do sistema. Para confirmar se o dispositivo registra chamadas de aplicativos de chamadas 3P, abra seu aplicativo discador e confirme se a chamada aparece no registro de chamadas do sistema.