O Android 14 Beta já está disponível. Teste hoje mesmo e nos conte o que você achou.

Nova permissão de execução para dispositivos Wi-Fi por perto

O Android 13 (API de nível 33) introduz a permissão de execução NEARBY_WIFI_DEVICES, parte do grupo de permissões NEARBY_DEVICES, para apps que gerenciam conexões do dispositivo com pontos de acesso Wi-Fi por perto. Essa permissão facilita a justificativa do acesso de um app a dispositivos Wi-Fi por perto. Em versões anteriores do Android, esses apps precisavam declarar a permissão ACCESS_FINE_LOCATION.

Se o app for direcionado ao Android 13 e chamar várias APIs de Wi-Fi diferentes, ele vai precisar receber essa nova permissão do usuário.

Casos de uso afetados

A nova permissão afeta vários casos de uso de Wi-Fi diferentes, incluindo:

  • Encontrar ou se conectar a dispositivos por perto, como impressoras ou dispositivos de transmissão de mídia. Esse fluxo de trabalho permite que o app execute estes tipos de tarefas:
    • Receber informações de AP fora da banda, como por BLE.
    • Descobrir e se conectar a dispositivos pelo Wi-Fi Aware e conexão usando um ponto de acesso somente local.
    • Descobrir e se conectar a dispositivos pelo Wi-Fi Direct.
  • Iniciar uma conexão com um SSID conhecido, como um carro ou dispositivo de casa inteligente.
  • Iniciar um ponto de acesso somente local.
  • Se conectar a dispositivos por perto com o Wi-Fi Aware.

A permissão faz parte do grupo de dispositivos por perto

A permissão NEARBY_WIFI_DEVICES faz parte do grupo de permissões de dispositivos por perto. Esse grupo, adicionado no Android 12 (nível 31 da API), também inclui permissões relacionadas ao Bluetooth e a banda ultralarga. Se o app solicitar várias permissões nesse grupo, o usuário vai ver uma única caixa de diálogo durante a execução, pedindo que ele aprove o acesso do app aos dispositivos por perto. Nas configurações do sistema, o usuário precisa ativar e desativar as permissões de dispositivos por perto como um grupo. Por exemplo, os usuários não podem desativar o acesso ao Wi-Fi, mas podem manter o acesso ao Bluetooth ativado para um determinado app.

Declarar explicitamente que o app não determina a localização física

Ao direcionar ao Android 13, considere se o app determina informações de localização das APIs de Wi-Fi. Caso contrário, você precisa fazer essa declaração. Para fazer isso, defina o atributo usesPermissionFlags como neverForLocation no arquivo de manifesto do app, conforme mostrado no snippet de código abaixo. Esse processo é parecido com o que você faz ao declarar que as informações do dispositivo Bluetooth nunca são usadas para localização:

<manifest ...>
    <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
                     android:usesPermissionFlags="neverForLocation" />
    <application ...>
        ...
    </application>
</manifest>

Manter compatibilidade com versões anteriores

Como a permissão NEARBY_WIFI_DEVICES está disponível apenas no Android 13 ou versões mais recentes, é importante manter todas as declarações ACCESS_FINE_LOCATION para oferecer compatibilidade com versões anteriores no app. No entanto, desde que você declare que o app não usa as APIs de Wi-Fi para determinar a localização física, é possível definir a versão máxima do SDK dessa permissão como 32, conforme mostrado no snippet de código abaixo:

<manifest ...>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
                     android:maxSdkVersion="32" />
    <application ...>
        ...
    </application>
</manifest>

Algumas APIs ainda exigem permissão de localização

Várias APIs de Wi-Fi continuam exigindo a permissão ACCESS_FINE_LOCATION para acessar a localização, assim como fazem na versão 12L e anteriores. Os exemplos incluem estes métodos da classe WifiManager:

Conferir quais APIs exigem a nova permissão

Caso o app seja destinado ao Android 13 ou versões mais recentes, é necessário declarar a permissão NEARBY_WIFI_DEVICES para chamar estas APIs de Wi-Fi:

Fluxos de trabalho do acesso Wi-Fi

A Figura 1 mostra o fluxo de trabalho do acesso Wi-Fi em dispositivos com a versão 12 L ou anteriores. Observe a dependência na permissão ACCESS_FINE_LOCATION.

Figura 1. Fluxograma para determinar se um app direcionado à versão 12 L ou anterior pode acessar informações de Wi-Fi.

A Figura 2 mostra o fluxo de trabalho do acesso Wi-Fi em dispositivos com o Android 13 ou versões mais recentes, para apps direcionados ao Android 13 ou mais recente. Desde que você declare que o app não determina a localização física das informações do dispositivo Wi-Fi, não é mais necessário declarar a permissão ACCESS_FINE_LOCATION:

Figura 2. Fluxograma para determinar se um app destinado ao Android 13 ou versões mais recentes pode acessar informações de Wi-Fi.