Usando compileSdkVersion 23 , no entanto, tente oferecer suporte já em 9.
getNetworkInfo(int)
foi preterido em 23. A sugestão era usar getAllNetworks()
e em getNetworkInfo(Network)
vez disso. No entanto, ambos exigem o mínimo de API 21.
Existe uma classe que possamos usar no pacote de suporte que possa ajudar com isso?
Sei que uma solução foi proposta antes , no entanto, o desafio dos meus requisitos mínimos de API 9 é um problema.
Respostas:
Você pode usar:
Ou em um caso de interruptor
fonte
activeNetwork.getType()
é obsoleto eConnectivityManager.TYPE_WIFI
obsoletocm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
Em outubro de 2018, a resposta aceita está obsoleta.
getType()
, e os próprios tipos, agora estão obsoletos no nível 28 da API. No Javadoc:Para usar
NetworkCapabilities
, você precisa passar umaNetwork
instância para ogetNetworkCapabilities()
método Para obter essa instância, você precisa chamar ogetActiveNetwork()
que foi adicionado no nível 23 da API.Então, por enquanto, acredito que a maneira correta de verificar com segurança se você está conectado à rede Wi-Fi ou celular é:
Você também pode procurar outros tipos de
TRANSPORT
, que você pode encontrar aqui .Nota importante: se você está conectado ao Wi-Fi e a uma VPN, seu estado atual pode estar
TRANSPORT_VPN
, portanto, você também pode procurar por ele.Não se esqueça de adicionar a seguinte permissão ao seu arquivo AndroidManifest:
fonte
NetworkInfo
é depreciado, você não pode mais usarNetWorkInfo
, então como isso fornece uma alternativa?Atualização de fevereiro de 2020:
A resposta aceita foi preterida novamente em
28 (Android P)
, mas seu método de substituição só funciona23 (Android M)
. Para suportar dispositivos mais antigos, escrevi uma função auxiliar no.Como usar:
Ele retorna um
int
, você pode alterá-lo paraenum
no seu código:Você pode copiar a versão Kotlin ou Java da função auxiliar.
Kotlin:
Java:
fonte
No Internet
,Cellular
eWi-Fi
. Se você não se importa com o tipo de conexão, modifique o código para se adequar ao seu aplicativo.Boolean
classe wrapper em vez daboolean
primitiva. Na instrução if, você precisará adicionar a verificaçãonull
. Além disso, e se amanhã outro novo modo de Transporte for introduzido no NetworkCapabilities ... portanto, o uso de número inteiro para ramificação ajudará e você também poderá usar casos de comutação.Resposta atualizada (19: 07: 2018):
Este método ajudará você a verificar se a conexão à Internet está disponível.
Resposta antiga:
Para uma melhor prática de reutilização de código, improvise a resposta do Bread Bread.
O código pode ser colocado na classe Util e pode ser usado para verificar se o telefone está conectado à Internet via Wi-Fi ou Internet móvel a partir de qualquer parte do seu aplicativo.
fonte
activeNetwork.isConnectedOrConnecting()
agora está obsoletoA resposta aceita está obsoleta na versão 28, então aqui está a solução que estou usando no meu projeto.
fonte
Resposta fevereiro de 2019
Para verificar se você está online:
Para obter o tipo de conectividade com a Internet antes / depois do Android M
Todos os casos requerem uma permissão para acessar o estado da rede
Como
NetworkInfo
está obsoleto e a partir da API 29 a partir de agora, temos que usarConnectivityManager.NetworkCallback
com suas alteraçõesonAvailable()
eonLost()
retornos de chamada do estado da rede .Uso:
Recursos
LifecycleObserver
para evitar vazamento de memória fazendo alguma limpeza noonDestroy()
método.BoradcastReceiver
eNetworkInfo
, e usaConnectivityManager.NetworkCallback
para a API 21 e acima.android.permission.ACCESS_NETWORK_STATE
; mas você deve incluí-lo para usar a classe de utilitário.Recursos
fonte
onLost
será chamado.onLost
não significa que o dispositivo perdeu a conexão com a internet, mas uma rede perdeu a conexão.É bom verificar se sua rede está conectada à Internet:
fonte
NetworkCapabilities.NET_CAPABILITY_VALIDATED
.Versão Kotlin:
fonte
Como sugerido Bread Bread , use getActiveNetworkInfo ()
agora chame o método, para uso seguro, tente pegar
E não se esqueça de adicionar:
fonte
getNetworkInfo(ConnectivityManager.TYPE_ETHERNET).isAvailable
Para estar do lado seguro, sugiro usar também o método
Todo o método pode ser o seguinte:
fonte
activeNetwork.getType()
é obsoleto eConnectivityManager.TYPE_WIFI
obsoletoVeja como eu verifico se a rede atual está usando celular ou não nas versões mais recentes do Android:
fonte
(Quase) Todas as respostas foram descontinuadas no Android P, então aqui está a
C#
solução ( que é fácil de seguir para desenvolvedores Java )A chave aqui é
Android.Net.TransportType
fonte
Talvez seja necessário verificar a conectividade com a Internet mais de uma vez. Portanto, será mais fácil para nós se escrevermos o bloco de código em um método de extensão de
Context
. Abaixo estão as minhas extensões auxiliares paraContext
eFragment
.Verificando a conexão com a Internet
Outras extensões
fonte
verifique se a Internet está disponível
fonte
connectivityManager.getActiveNetwork () não foi encontrado abaixo do android M (API 28). networkInfo.getState () está obsoleto acima do Android L.
Então, a resposta final é:
fonte
Muitas respostas ainda usam getNetworkType abaixo de 23, que está obsoleto; use o código abaixo para verificar se o dispositivo possui uma conexão com a internet.
..
E, não esqueça de adicionar esta linha no Manifest.
fonte
Como as respostas postadas permitem apenas consultar a rede ativa, veja como obter
NetworkInfo
qualquer rede, não apenas a ativa (por exemplo, rede Wi-Fi) (desculpe, código Kotlin à frente)Isso requer API 21 ou superior e a permissão
android.permission.ACCESS_NETWORK_STATE
fonte
cm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
NetManager que você pode usar para verificar a conexão com a Internet no Android com Kotlin
Se você usar minSdkVersion> = 23
Se você usar minSdkVersion <23
fonte
https://www.agnosticdev.com/content/how-detect-network-connectivity-android
siga este tutorial, ele deve ajudar quem procura respostas.
note que networkInfo foi descontinuado e, portanto, substitua isNetworkReacheable () pela resposta @vidha abaixo, passando getApplicationContext () como parâmetro
fonte
fonte
Isso funciona para mim em Kotlin. Muitas APIs foram descontinuadas na classe Network Manager, portanto, a resposta abaixo cobre todo o suporte à API.
Você também adicionará abaixo
fonte
O código abaixo funciona em todas as APIs. (Kotlin)
No entanto, getActiveNetworkInfo () é preterido apenas na API 29 e funciona em todas as APIs, para que possamos usá-lo em todas as APIs abaixo de 29
fonte
Algo assim:
E no corpo principal do programa:
fonte
Isso funcionará também no Android 10. Ele retornará true se conectado à Internet, caso contrário, retorne false.
fonte