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:
WifiManager
WifiAwareManager
WifiAwareSession
WifiP2pManager
WifiRttManager
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
.
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
: