Quero criar um aplicativo que mostre uma lista de redes Wi-Fi disponíveis e conecte-se à rede que for selecionada pelo usuário.
Eu implementei a parte que mostra os resultados da verificação. Agora, quero conectar-me a uma rede específica selecionada pelo usuário na lista de resultados da verificação.
Como eu faço isso?
android
android-wifi
wifimanager
Vikram Gupta
fonte
fonte
Respostas:
Você precisa criar uma
WifiConfiguration
instância como esta:Então, para a rede WEP, você precisa fazer o seguinte:
Para rede WPA, você precisa adicionar uma senha como esta:
Para rede aberta, você precisa fazer o seguinte:
Em seguida, você precisa adicioná-lo às configurações do gerenciador de wifi do Android:
E, finalmente, pode ser necessário ativá-lo, para que o Android se conecte a ele:
UPD: No caso de WEP, se sua senha estiver em hexadecimal, não será necessário cercá-la entre aspas.
fonte
A resposta anterior funciona , mas a solução pode realmente ser mais simples. Não é necessário fazer um loop na lista de redes configuradas, pois você obtém o ID da rede ao adicionar a rede através do WifiManager.
Portanto, a solução completa e simplificada ficaria assim:
fonte
CHANGE_WIFI_STATE
permissão é necessária.Consulte: https://developer.android.com/reference/android/net/wifi/ScanResult.html#capabilities
Existem três tipos de redes Wi-Fi.
Primeiro, instancie um objeto WifiConfiguration e preencha o SSID da rede (observe que ele deve estar entre aspas duplas), defina o estado inicial como desativado e especifique a prioridade da rede (números em torno de 40 parecem funcionar bem).
Agora, a parte mais complicada: precisamos preencher vários membros do WifiConfiguration para especificar o modo de segurança da rede. Para redes abertas.
Para redes usando WEP; observe que a chave WEP também está entre aspas duplas.
Para redes que usam WPA e WPA2, podemos definir os mesmos valores para ambos.
Finalmente, podemos adicionar a rede à lista conhecida do WifiManager
fonte
Crédito para @ raji-ramamoorthi & @kenota
A solução que funcionou para mim é a combinação dos colaboradores acima neste tópico.
Chegar
ScanResult
aqui é o processo.Aviso aos
unregister
lo emonPause
&onStop
viver estaunregisterReceiver(broadcastReceiver);
fonte
Se o seu dispositivo conhece as configurações Wifi (já armazenadas), podemos ignorar a ciência dos foguetes. Basta percorrer as configurações e verificar se o SSID está correspondendo. Nesse caso, conecte e retorne .
Defina permissões:
Conectar:
fonte
Quebrei a cabeça para entender por que suas respostas para o WPA / WPA2 não funcionam ... depois de horas de tentativas, encontrei o que está faltando:
É NECESSÁRIO para redes WPA !!!!
Agora, funciona :)
fonte
Esta é uma atividade que você pode subclassificar para forçar a conexão a um wifi específico: https://github.com/zoltanersek/android-wifi-activity/blob/master/app/src/main/java/com/zoltanersek/androidwifiactivity/ WifiActivity.java
Você precisará subclassificar esta atividade e implementar seus métodos:
fonte
No nível 29 da API, o
WifiManager.enableNetwork()
método está obsoleto . De acordo com a documentação da API do Android (confira aqui ):No nível 29 da API, para conectar-se à rede Wi-Fi, você precisará usar
WifiNetworkSpecifier
. Você pode encontrar um exemplo de código em https://developer.android.com/reference/android/net/wifi/WifiNetworkSpecifier.Builder.html#build ()fonte
Eu também tentei me conectar à rede. Nenhuma das soluções propostas acima funciona para o hugerock t70. Função wifiManager.disconnect (); não desconecta da rede atual. Portanto, não é possível reconectar-se à rede especificada. Eu modifiquei o código acima. Para mim, o código bolow funciona perfeitamente:
fonte
UID nnnnn does not have permission to update configuration xxxx. MD_START_CONNECT but no requests and connected, but app does not have sufficient permissions, bailing.
Tente este método. É muito fácil:
fonte