Não quero que meu usuário tente fazer o download de algo, a menos que tenha o Wi-Fi conectado. No entanto, só consigo saber se o Wi-Fi está ativado, mas eles ainda podem ter uma conexão 3G.
android.net.wifi.WifiManager m = (WifiManager) getSystemService(WIFI_SERVICE);
android.net.wifi.SupplicantState s = m.getConnectionInfo().getSupplicantState();
NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(s);
if (state != NetworkInfo.DetailedState.CONNECTED) {
return false;
}
No entanto, o estado não é o que eu esperaria. Embora o Wi-Fi esteja conectado, estou conseguindo OBTAINING_IPADDR
o estado.
fonte
android.permission.ACCESS_NETWORK_STATE
ao seu AndroidManifest.xml para que isso funcione.connectivityManager.getNetworkCapabilities(network).hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
Como o método NetworkInfo.isConnected () agora está obsoleto na API-23 , eis um método que detecta se o adaptador Wi-Fi está ativado e também conectado a um ponto de acesso usando o WifiManager:
fonte
NetworkInfo.isConnected()
não parece obsoleto para mim.android.permission.ACCESS_WIFI_STATE
Eu simplesmente uso o seguinte:
Que retornará um desses estados no momento em que você chama getSupplicantState ();
fonte
Estou usando isso em meus aplicativos para verificar se a rede ativa é Wi-Fi:
fonte
active
rede (o que será usado para fazer o download) é WiFiNetworkInfo#isConnected
está obsoletoDei uma olhada em algumas perguntas como essa e surgiu com isso:
Eu uso se para minha licença verificar no Root Toolbox PRO, e parece funcionar muito bem.
fonte
getNetworkInfo()
retornará um nulo, se a rede não existir. Portanto, se o dispositivo não tiver conexão móvel, isso gerará um erro. Na maioria dos casos, TYPE_ETHERNET causará um valor nulo neste caso, pois a maioria dos dispositivos não terá uma conexão Ethernet.Enquanto a resposta de Jason está correta, hoje em dia getNetWorkInfo (int) é um método obsoleto. Portanto, a próxima função seria uma boa alternativa:
fonte
Usando
WifiManager
você pode fazer:O método getNeworkId retorna -1 somente quando não está conectado a uma rede;
fonte
fonte
boolean isConnectedOrConnecting ()
Indica se a conectividade de rede existe ou está em processo de estabelecimento. Isso é bom para aplicativos que precisam fazer qualquer coisa relacionada à rede que não seja ler ou gravar dados. Para o último, ligue emisConnected()
vez disso, o que garante que a rede seja totalmente utilizável.O código a seguir (no Kotlin) funciona da API 21 até pelo menos a versão atual da API (API 29). A função getWifiState () retorna um dos três valores possíveis para o estado da rede WiFi: Disable, EnabledNotConnected e Connected que foram definidos em uma classe enum. Isso permite tomar decisões mais granulares, como informar o usuário para ativar o Wi-Fi ou, se já estiver ativado, conectar-se a uma das redes disponíveis. Mas se tudo o que for necessário é um booleano indicando se a interface WiFi está conectada a uma rede, a outra função é Wi-FiConnected (). Ele usa o anterior e compara o resultado ao Conectado.
Ele se inspira em algumas das respostas anteriores, mas tenta resolver os problemas introduzidos pela evolução das APIs do Android ou pela crescente disponibilidade do IP V6. O truque era usar:
ao invés de:
De acordo com a documentação: https://developer.android.com/reference/kotlin/android/net/wifi/WifiInfo.html#getbssid, ele retornará nulo se não estiver conectado a uma rede. E mesmo se não tivermos permissão para obter o valor real, ele ainda retornará algo diferente de nulo se estivermos conectados.
Lembre-se também do seguinte:
No manifesto, não esqueça de adicionar:
O código proposto é:
fonte
A
NetworkInfo
classe foi descontinuada no nível 29 da API, juntamente com os métodos de acesso relacionados, comoConnectivityManager#getNetworkInfo()
eConnectivityManager#getActiveNetworkInfo()
.A documentação agora sugere que as pessoas usem a
ConnectivityManager.NetworkCallback
API para monitoramento de retorno de chamada assíncrono, ou useConnectivityManager#getNetworkCapabilities
ouConnectivityManager#getLinkProperties
para acesso sincronizado às informações da redePara verificar se o Wi-Fi está conectado, eis o código que eu uso:
Kotlin:
Java:
Lembre-se de adicionar também permissão
ACCESS_NETWORK_STATE
ao seu arquivo de manifesto.fonte
Experimente este método.
Este método ajudará a encontrar a conexão à Internet disponível ou não.
fonte
Isso funciona para mim:
E adicione esta permissão:
fonte
Muitas das respostas usam código obsoleto ou código disponível nas versões da API higer. Agora eu uso algo assim
fonte
Aqui está o que eu uso como método utilitário nos meus aplicativos:
fonte
Na nova versão Android
e adicionar premissa também
fonte
connManager.getAllNetworks()
requer o nível 21. da APISemelhante à resposta de Jason Knight, mas da maneira Kotlin:
fonte
ConnectivityManager.TYPE_WIFI
está obsoletoEsta é uma solução mais fácil. Consulte Pergunta sobre estouro de pilha Verificando o Wi-Fi ativado ou não no Android .
PS Não esqueça de adicionar o código ao arquivo manifest.xml para permitir permissão. Como mostrado abaixo.
fonte
Experimentar
Isso retorna 0 até que o dispositivo tenha uma conexão utilizável (na minha máquina, um Samsung SM-T280, Android 5.1.1).
fonte
Você pode ativar o WIFI se não estiver ativado da seguinte maneira 1. verifique o estado do WIFI conforme respondido por @ Jason Knight 2. se não estiver ativado, ative-o, não se esqueça de adicionar permissão WIFI no arquivo de manifesto
Sua classe Java deve ser assim
}
fonte
Adicione isto para JAVA:
no arquivo manifesto, adicione as seguintes permissões:
fonte
Tipo de pergunta antiga, mas é isso que eu uso. requer min api nível 21 também leva em consideração Networkinfo apis.
fonte