如何查看Android上是否连接了Wi-Fi?

我不希望我的用户甚至尝试下载东西,除非他们连接了Wi-Fi。 但是,我似乎只能看出是否启用了Wi-Fi,但他们仍然可以使用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; } 

但是,国家不是我所期望的。 即使Wi-Fi已连接,我正在获取OBTAINING_IPADDR状态。

您应该可以使用ConnectivityManager获取Wi-Fi适配器的状态。 从那里你可以检查它是否连接,甚至可用 。

 ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (mWifi.isConnected()) { // Do whatever } 

注意:应该注意的是(对我们这里n00bies),你需要添加

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

给你

AndroidManifest.xml为此工作。

注2public NetworkInfo getNetworkInfo (int networkType)现在已被弃用:

此方法已在API级别23中弃用。此方法不支持多个相同类型的连接网络。 使用getAllNetworks()和getNetworkInfo(android.net.Network)来代替。

由于现在API-23中 不推荐使用 NetworkInfo.isConnected()方法,因此以下是一种方法,用于检测Wi-Fi适配器是否打开,并使用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 } } 

我简单地使用以下内容:

 SupplicantState supState; wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); supState = wifiInfo.getSupplicantState(); 

在你调用getSupplicantState()的时候,将会返回这些状态之一。

相关 – 协会完成。

关联 – 尝试关联一个接入点。

已完成 – 所有验证已完成。

DISCONNECTED – 此状态表示客户端未关联,但很可能开始寻找接入点。

DORMANT – 当客户端发出明确的DISCONNECT命令时报告的Android添加状态。

FOUR_WAY_HANDSHAKE – 正在进行WPA 4-Way Key Handshake。

GROUP_HANDSHAKE – WPA组密钥握手正在进行中。

INACTIVE – 非活动状态。

无效 – 通常应该看不到的伪状态。

扫描 – 扫描网络。

未初始化 – 没有连接。

我看了几个这样的问题,想出了这个问题:

 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 } 

我使用如果在Root Toolbox PRO中进行许可证检查,它似乎工作得很好。

我在我的应用程序中使用它来检查活动网络是否是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 } 
 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; } 

虽然杰森的答案是正确的,但现在getNetWorkInfo(int)是一个不推荐的方法。 所以,下一个功能将是一个不错的选择:

 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; } 

试试这个方法。

 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; } 

这种方法将有助于找到可用的互联网连接。

使用WifiManager你可以这样做:

 WifiManager wifi = (WifiManager) getSystemService (Context.WIFI_SERVICE); if (wifi.getConnectionInfo().getNetworkId() != -1) {/* connected */} 

方法getNeworkId只在没有连接到网络时返回-1;

这适用于我:

  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(); } 

并添加此权限:

 <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

以下是我在应用程序中用作实用程序的方法:

 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(); } 

在新版本的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 } } } } 

并增加准许

这是一个简单的解决方案。 请参阅堆栈溢出问题在Android上检查是否启用Wi-Fi

PS不要忘记将代码添加到manifest.xml文件以允许权限。 如下所示。

 <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> 

尝试

 wifiManager.getConnectionInfo().getIpAddress() 

这返回0,直到设备有一个可用的连接(在我的机器上,三星SM-T280,Android 5.1.1)。

你可以打开WIFI,如果它没有被激活如下1.检查WIFI状态为@Jason Knight回答2.如果未激活,激活它不要忘记在清单文件中添加WIFI权限

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

你的Java类应该是这样的

 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(); } 

}