Je ne veux même pas que mon utilisateur essaie de télécharger quelque chose à moins qu'il soit connecté au Wi-Fi. Cependant, je peux seulement sembler être capable de dire si le Wi-Fi est activé, mais ils pourraient toujours avoir une connexion 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;
}
Cependant, l'état n'est pas ce que j'attendais. Même si le Wi-Fi est connecté, je reçois OBTAINING_IPADDR
comme état.
Vous devriez pouvoir utiliser ConnectivityManager pour obtenir l'état de l'adaptateur Wi-Fi. De là, vous pouvez vérifiez si elle est connectée ou même disponible .
_ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mWifi.isConnected()) {
// Do whatever
}
_
NOTE: Il convient de noter (pour nous n00bies ici) que vous devez ajouter
_<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
_
à ton
AndroidManifest.xml pour que cela fonctionne.
NOTE2 : public NetworkInfo getNetworkInfo (int networkType)
est maintenant obsolète:
Cette méthode était obsolète dans l'API de niveau 23. Cette méthode ne prend pas en charge plusieurs réseaux connectés du même type. Utilisez plutôt getAllNetworks () et getNetworkInfo (Android.net.Network).
NOTE3 : public static final int TYPE_WIFI
est maintenant obsolète:
Cette constante était obsolète dans l'API de niveau 28. Les applications devraient plutôt utiliser NetworkCapabilities.hasTransport (int) ou requestNetwork (NetworkRequest, NetworkCallback) pour demander un réseau approprié. pour les transports pris en charge.
Puisque la méthode NetworkInfo.isConnected () est maintenant obsolète dans API-2, voici une méthode qui détecte si l'adaptateur Wi-Fi est connecté et connecté à un point d’accès via WifiManager:
private boolean checkWifiOnAndConnected() {
WifiManager wifiMgr = (WifiManager) getSystemService(Context.WIFI_SERVICE);
if (wifiMgr.isWifiEnabled()) { // Wi-Fi adapter is ON
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
if( wifiInfo.getNetworkId() == -1 ){
return false; // Not connected to an access point
}
return true; // Connected to an access point
}
else {
return false; // Wi-Fi adapter is OFF
}
}
J'utilise simplement les éléments suivants:
SupplicantState supState;
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
supState = wifiInfo.getSupplicantState();
Ce qui renverra l'un de ces états au moment où vous appelez getSupplicantState ();
ASSOCIÉ - Association terminée.
ASSOCIATION - Tentative d'association avec un point d'accès.
COMPLETED - Toute authentification terminée.
DISCONNECTED - Cet état indique que le client n'est pas associé, mais est susceptible de commencer à rechercher un point d'accès.
DORMANT - État ajouté par Android signalé lorsqu'un client émet une commande DISCONNECT explicite.
FOUR_WAY_HANDSHAKE - WPA Clé 4-Way Handshake en cours.
GROUP_HANDSHAKE - WPA Group Key Poignée de main en cours.
INACTIVE - État inactif.
INVALID - Un pseudo-état qui ne devrait normalement jamais être vu.
SCANNING - Numérisation pour un réseau.
NON INITIALISÉ - Pas de connexion.
J'utilise ceci dans mes applications pour vérifier si le réseau actif est Wi-Fi:
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null && ni.getType() == ConnectivityManager.TYPE_WIFI)
{
// Do your work here
}
J'ai jeté un coup d'œil à quelques questions comme celle-ci et en suis venu à ceci:
ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobile = connManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (wifi.isConnected()){
// If Wi-Fi connected
}
if (mobile.isConnected()) {
// If Internet connected
}
J'utilise if pour mon contrôle de licence dans Root Toolbox PRO, et cela semble bien fonctionner.
Bien que la réponse de Jason soit correcte, getNetWorkInfo (int) est une méthode obsolète. La prochaine fonction serait donc une alternative intéressante:
public static boolean isWifiAvailable (Context context)
{
boolean br = false;
ConnectivityManager cm = null;
NetworkInfo ni = null;
cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
ni = cm.getActiveNetworkInfo();
br = ((null != ni) && (ni.isConnected()) && (ni.getType() == ConnectivityManager.TYPE_WIFI));
return br;
}
En utilisant WifiManager
vous pouvez faire:
WifiManager wifi = (WifiManager) getSystemService (Context.WIFI_SERVICE);
if (wifi.getConnectionInfo().getNetworkId() != -1) {/* connected */}
La méthode getNeworkId renvoie -1 uniquement si elle n'est pas connectée à un réseau;
ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
boolean is3g = manager.getNetworkInfo(
ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
boolean isWifi = manager.getNetworkInfo(
ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
Log.v("", is3g + " ConnectivityManager Test " + isWifi);
if (!is3g && !isWifi) {
Toast.makeText(
getApplicationContext(),
"Please make sure, your network connection is ON ",
Toast.LENGTH_LONG).show();
}
else {
// Put your function() to go further;
}
Essayez cette méthode.
public boolean isInternetConnected() {
ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
boolean ret = true;
if (conMgr != null) {
NetworkInfo i = conMgr.getActiveNetworkInfo();
if (i != null) {
if (!i.isConnected()) {
ret = false;
}
if (!i.isAvailable()) {
ret = false;
}
}
if (i == null)
ret = false;
} else
ret = false;
return ret;
}
Cette méthode aidera à trouver une connexion Internet disponible ou non.
Cela fonctionne pour moi:
ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
// Mobile
State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
// Wi-Fi
State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
// And then use it like this:
if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING)
{
Toast.makeText(Wifi_Gprs.this,"Mobile is Enabled :) ....",Toast.LENGTH_LONG).show();
}
else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING)
{
Toast.makeText(Wifi_Gprs.this,"Wifi is Enabled :) ....",Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(Wifi_Gprs.this,"No Wifi or Gprs Enabled :( ....",Toast.LENGTH_LONG).show();
}
Et ajoutez cette permission:
<uses-permission Android:name="Android.permission.INTERNET"/>
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
Voici ce que j'utilise comme méthode d'utilitaire dans mes applications:
public static boolean isDeviceOnWifi(final Context context) {
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return mWifi != null && mWifi.isConnectedOrConnecting();
}
Semblable à la réponse de @Jason Knight, mais à la manière de Kotlin:
val connManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
if (mWifi.isConnected) {
// Do whatever
}
Dans la nouvelle version Android
private void getWifiInfo(Context context) {
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
Network[] networks = connManager.getAllNetworks();
if(networks == null || networks.length == 0)
return;
for( int i = 0; i < networks.length; i++) {
Network ntk = networks[i];
NetworkInfo ntkInfo = connManager.getNetworkInfo(ntk);
if (ntkInfo.getType() == ConnectivityManager.TYPE_WIFI && ntkInfo.isConnected() ) {
final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
if (connectionInfo != null) {
// add some code here
}
}
}
}
et ajouter la permission de
C'est une solution plus facile. Voir la question relative au débordement de la pile vérification de l'activation du Wi-Fi ou non sur Android.
P.S. N'oubliez pas d'ajouter le code dans le fichier manifest.xml pour autoriser les autorisations. Comme indiqué ci-dessous.
<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<uses-permission Android:name="Android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
Essayer
wifiManager.getConnectionInfo().getIpAddress()
Cela renvoie 0 jusqu'à ce que l'appareil dispose d'une connexion utilisable (sur ma machine, un Samsung SM-T280, Android 5.1.1).
Vous pouvez activer le WIFI s'il n'est pas activé comme suit: 1. vérifiez l'état du WIFI comme indiqué par @Jason Knight 2. s'il n'est pas activé, activez-le. N'oubliez pas d'ajouter une autorisation WIFI dans le fichier manifeste.
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
Votre classe Java devrait être comme ça
public class TestApp extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//check WIFI activation
ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mWifi.isConnected() == false) {
showWIFIDisabledAlertToUser();
}
else {
Toast.makeText(this, "WIFI is Enabled in your devide", Toast.LENGTH_SHORT).show();
}
}
private void showWIFIDisabledAlertToUser(){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage("WIFI is disabled in your device. Would you like to enable it?")
.setCancelable(false)
.setPositiveButton("Goto Settings Page To Enable WIFI",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
Intent callGPSSettingIntent = new Intent(
Settings.ACTION_WIFI_SETTINGS);
startActivity(callGPSSettingIntent);
}
});
alertDialogBuilder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
dialog.cancel();
}
});
AlertDialog alert = alertDialogBuilder.create();
alert.show();
}
}
Beaucoup de réponses utilisent du code obsolète, ou du code disponible sur les versions plus avancées de l'API. Maintenant j'utilise quelque chose comme ça
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if(connectivityManager != null) {
for (Network net : connectivityManager.getAllNetworks()) {
NetworkCapabilities nc = connectivityManager.getNetworkCapabilities(net);
if (nc != null && nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
&& nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET))
return true;
}
}
return false;