如何查看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为此工作。
注2 : public 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(); }
}