O Android Q adiciona uma nova API para gravar a saída de áudio interna de outro aplicativo e também para monitorar a temperatura do dispositivo.
O Google dá e o Google tira. Cada nova versão do Android apresenta muitas APIs novas que melhoram a funcionalidade dos aplicativos existentes ou abrem novas categorias de aplicativos. Por outro lado, o Google também remove o acesso ou restringe os recursos das APIs existentes para melhorar a segurança da plataforma Android. O lançamento do Android Q não é diferente, e já falamos muito sobre suas mudanças no armazenamento compartilhado, acesso à área de transferência, notificações e outras APIs. Neste ano Na conferência de desenvolvedores Google I/O, o Google anunciou novas APIs no Android Q que são especialmente interessantes para usuários e desenvolvedores de jogos móveis: o AudioPlaybackCapture e APIs térmicas.
Gravando o áudio de outros aplicativos com AudioPlaybackCapture no Android Q
Os jogos para celular são uma indústria enorme e não há sinais de desaceleração tão cedo, especialmente em mercados como os EUA, China e Índia. Com mais pessoas gastando tempo em seus smartphones para jogar e nas redes sociais, não é surpresa que as pessoas queiram compartilhar suas experiências de jogo online.
O Android oferece suporte à captura de tela basicamente desde o início, mas a captura de vídeos da tela só é compatível desde o Android 5.0 Lollipop com a introdução do API MediaProjection. Infelizmente, esta API não permite que aplicativos de terceiros gravem a saída de áudio interna de outros aplicativos, forçando gravadores de tela de terceiros a gravar saída de áudio externa do microfone do dispositivo (s). OEMs como Samsung e Huawei fornecer aplicativos do sistema para gravar a saída de áudio interna durante uma gravação de tela, mas a única maneira para proprietários de outros dispositivos gravarem adequadamente a saída de vídeo e áudio de seus dispositivos é comprar a acessório de terceiros. Felizmente, o Google está finalmente introduzindo uma maneira no Android Q para que aplicativos de terceiros gravem o áudio de outros aplicativos.
A API AudioPlaybackCapture é descrita pelo Google como análoga à captura de tela, mas para gravação de áudio. Embora o único aplicativo até agora que usa a API seja o do Google Legenda ao vivo, uma ferramenta de acessibilidade que adiciona legendas a qualquer vídeo reproduzido no dispositivo, a API a documentação afirma que seu objetivo principal é permitir que aplicativos de streaming capturem o áudio que está sendo jogado por jogos. Pense em jogadores móveis transmitindo suas sessões em serviços como Twitch ou YouTube. A API foi projetada para não afetar a latência de áudio do aplicativo cujo áudio está sendo capturado, tornando-a perfeita para gravação de jogos, para que o áudio e o vídeo não fiquem dessincronizados.
Ao contrário dos primeiros dias do Android, a abordagem do Google em relação às novas APIs é mais cautelosa. AudioPlaybackCapture só poderá ser usado se o aplicativo cujo áudio está sendo capturado e o aplicativo que faz a captura atenderem a requisitos específicos. Aqui está um resumo desses requisitos:
- Para que o áudio de um aplicativo seja capturado por um aplicativo de terceiros, os seguintes requisitos devem ser atendidos:
- O aplicativo deve ter permitirAudioPlaybackCapture definido como verdadeiro ou não definido em seu manifesto. (O padrão é verdadeiro para aplicativos direcionados ao Android Q, mas pode ser definido manualmente para aplicativos direcionados ao Android Pie.)
- O aplicativo que produz áudio deve ter uso de áudio do tipo USAGE_MEDIA, USAGE_GAME ou USAGE_UNKNOWN.
- A política de captura de áudio (setAllowedCapturePolicy) deve ser definida como ALLOW_CAPTURE_BY_ALL. Esta política pode ser definida em tempo de execução, mas a reprodução deve ser reiniciada para que a alteração da política entre em vigor. Se ALLOW_CAPTURE_BY_SYSTEM estiver definido, apenas os aplicativos do sistema poderão gravar o áudio (mas serão restritos em que eles não podem salvar o áudio, passá-lo para um aplicativo de terceiros ou gravar em> 16kHz mono de 16 bits qualidade.)
- Para que um aplicativo grave áudio de outro aplicativo, os seguintes requisitos devem ser atendidos:
- O aplicativo deve exibir o prompt MediaProjectionManager.createScreenCaptureIntent e o usuário deve aceitá-lo.
- O aplicativo deve conter o GRAVAR AUDIO permissão.
- O aplicativo deve estar no mesmo perfil de usuário do aplicativo cujo áudio será gravado.
- O aplicativo deve exibir o prompt MediaProjectionManager.createScreenCaptureIntent e o usuário deve aceitá-lo.
Imagino que a maioria dos jogos permitirá que seu áudio seja capturado por aplicativos que usam essa nova API, mas pode levar algum tempo para que os jogos sejam atualizados para suportá-la. Por outro lado, não espere que nenhum aplicativo de streaming de música ou vídeo suporte esta API para terceiros devido a problemas de licenciamento. No entanto, as limitações impostas pelo Google se um aplicativo definir sua política de captura de áudio como ALLOW_CAPTURE_BY_SYSTEM significam que os desenvolvedores de aplicativos de streaming de música e vídeo devem aceitar permitir a captura de áudio pelo sistema para melhorar a acessibilidade.
Para ler mais sobre a API AudioPlaybackCapture no Android Q, confira esta página.
Monitorando a aceleração com API térmica no Android Q
A aceleração térmica é quase inteiramente gerenciada pelo sistema, sem entrada ou mesmo notificação para os aplicativos mais afetados pela aceleração. Se os recursos do dispositivo estiverem muito sobrecarregados, a maioria dos dispositivos irá acelerar as velocidades da CPU e GPU em detrimento do desempenho do seu jogo. Não há nada que você, como desenvolvedor de jogos, possa fazer sobre isso, exceto avisar o usuário antes de alterar qualquer configuração sobre o impacto potencial que suas alterações podem ter no desempenho.
Com a nova API Thermal no Android Q, no entanto, os aplicativos podem receber retornos de chamada para diferentes estágios de otimização de desempenho - dando aos desenvolvedores a chance de ajudar a reduzir a pressão sobre o dispositivo, diminuindo as atividades que exigem CPU, GPU ou modem significativos uso. Por exemplo, um jogo pode reduzir dinamicamente a resolução até que o dispositivo não esteja mais com aceleração de GPU, ou um aplicativo de mapas pode desativar recursos aprimorados, como navegação em realidade aumentada para reduzir a carga na CPU.
Para usar esta nova API, os aplicativos registram um ouvinte no PowerManager (addThermalStatusListener) e o sistema envia ao aplicativo um dos seguintes códigos de status térmico:
- THERMAL_STATUS_NONE: "Não está sob limitação."
- THERMAL_STATUS_LIGHT: "Aceleração leve onde a UX não é afetada."
- THERMAL_STATUS_MODERATE: "Aceleração moderada onde a UX não é amplamente afetada."
- THERMAL_STATUS_SEVERE: "Aceleração severa onde a UX é amplamente afetada."
- THERMAL_STATUS_CRITICAL: "A plataforma fez de tudo para reduzir a energia."
- THERMAL_STATUS_EMERGENCY: "Os principais componentes da plataforma estão desligando devido à condição térmica. As funcionalidades do dispositivo serão limitadas."
- THERMAL_STATUS_SHUTDOWN: "Precisa desligar imediatamente.
O suporte para a API Thermal obviamente requer Android Q, mas outro requisito é a adição de um novo HAL. O Google diz que os dispositivos Pixel no Android Q (ou seja, Pixel, Pixel XL, Pixel 2, Pixel 2 XL, Pixel 3, Pixel 3 XL, Pixel 3a, e Pixel 3aXL) oferecem suporte à API Thermal, mas o Google está trabalhando para adicionar suporte para outros dispositivos.
Leia mais sobre o API térmica aqui.