Pedir permissão para acessar dispositivos Wi-Fi por perto

Os apps direcionados ao Android 13 (nível 33 da API) ou versões mais recentes e que gerenciam conexões Wi-Fi precisam solicitar a permissão de execução NEARBY_WIFI_DEVICES. Essa permissão facilita a justificativa de 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.

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. Quando você solicita qualquer combinação de permissões desse grupo de permissões, o sistema mostra uma única caixa de diálogo de execução e pede para o usuário aprovar o acesso do app a 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 manter o acesso ao Bluetooth ativado para um determinado app.

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

Ao ser destinado ao Android 13 ou versões mais recentes, considere se o app deriva informações de localização de APIs de Wi-Fi. Caso contrário, faça 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>

As versões anteriores e algumas APIs exigem permissão de localização

Várias APIs de Wi-Fi exigem a permissão ACCESS_FINE_LOCATION, mesmo quando o app é destinado ao Android 13 ou versões mais recentes. Os exemplos incluem os seguintes métodos da classe WifiManager:

Além disso, como a permissão NEARBY_WIFI_DEVICES está disponível apenas no Android 13 e versões mais recentes, mantenha todas as declarações para ACCESS_FINE_LOCATION para oferecer compatibilidade com versões anteriores no app. No entanto, desde que seu app não dependa de informações de localização precisas, você pode 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>

Verificar se há APIs que exigem a 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 de acesso ao Wi-Fi em dispositivos com o Android 13 ou versões mais recentes, para apps destinados ao Android 13 ou versões mais recentes. 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 1. Fluxograma para determinar se um app destinado ao Android 13 (nível 33 da API) ou versões mais recentes pode acessar informações de Wi-Fi.

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

Figura 2. Fluxograma para determinar se um app destinado ao 12L (nível 32 da API) ou versões anteriores pode acessar informações de Wi-Fi.