我的Android进阶之旅------>Android检测wifi连接状态

应用场景:实现判断当前网络是否可用

当前有可用网络,如下图:

当前没有可用网络,如下图:

实现步骤:

1、获取ConnectivityManager对象

Context context = activity.getApplicationContext();
// 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)
ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

2、获取NetworkInfo对象

// 获取NetworkInfo对象
NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();

3、判断当前网络状态是否为连接状态

if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED)
{
      return true;
}

4、在AndroidManifest.xml中添加访问当前网络状态权限

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

代码如下:

复制代码
public class ClassTestDemoActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        if (isNetworkAvailable(ClassTestDemoActivity.this))
        {
            Toast.makeText(getApplicationContext(), "当前有可用网络!", Toast.LENGTH_LONG).show();
        }
        else
        {
            Toast.makeText(getApplicationContext(), "当前没有可用网络!", Toast.LENGTH_LONG).show();
        }
    }
    
    /**
     * 检查当前网络是否可用
     * 
     * @param context
     * @return
     */
    
    public boolean isNetworkAvailable(Activity activity)
    {
        Context context = activity.getApplicationContext();
        // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        
        if (connectivityManager == null)
        {
            return false;
        }
        else
        {
            // 获取NetworkInfo对象
            NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();
            
            if (networkInfo != null && networkInfo.length > 0)
            {
                for (int i = 0; i < networkInfo.length; i++)
                {
                    System.out.println(i + "===状态===" + networkInfo[i].getState());
                    System.out.println(i + "===类型===" + networkInfo[i].getTypeName());
                    // 判断当前网络状态是否为连接状态
                    if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED)
                    {
                        return true;
                    }
                }
            }
        }
        return false;
    }
}
复制代码

今天要实现监听系统Wifi连接状态,下面代码简化后提取出来的,以备后用。

step1. 编写BroadcastReceiver

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. import android.content.BroadcastReceiver;  
  2. import android.content.Context;  
  3. import android.content.Intent;  
  4. import android.net.ConnectivityManager;  
  5. import android.net.NetworkInfo;  
  6. import android.net.NetworkInfo.State;  
  7. import android.net.wifi.WifiInfo;  
  8. import android.net.wifi.WifiManager;  
  9. import android.text.format.Formatter;  
  10. import android.util.Log;  
  11.   
  12. import com.canplay.systemui.QuickSettings;  
  13. /**  
  14.  * @author ouyangpeng  
  15.  * @link http://blog.csdn.net/ouyang_peng  
  16.  */  
  17. public class NetworkReceiver extends BroadcastReceiver {  
  18.     @Override  
  19.     public void onReceive(Context context, Intent intent) {  
  20.         ConnectivityManager connectivityManager = (ConnectivityManager) context  
  21.                 .getSystemService(Context.CONNECTIVITY_SERVICE);  
  22.   
  23.         NetworkInfo net = connectivityManager.getActiveNetworkInfo();  
  24.         if (net == null) {  
  25.             Log.i("@@@@@@@@@@@@NetworkReceiver", "无网络连接");  
  26.         } else {  
  27.             Log.i("@@@@@@@@@@@@NetworkReceiver", "网络连接类型为" + net.getTypeName());  
  28.         }  
  29.         // wifi连接状态  
  30.         State wifi = connectivityManager.getNetworkInfo(  
  31.                 ConnectivityManager.TYPE_WIFI).getState();  
  32.         if (wifi == State.CONNECTED || wifi == State.CONNECTING) {  
  33.             Log.i("@@@@@@@@@@@@NetworkReceiver", "连接wifi");  
  34.             // wifi管理  
  35.             WifiManager wifiManager = (WifiManager) context  
  36.                     .getSystemService(Context.WIFI_SERVICE);  
  37.             WifiInfo wifiInfo = wifiManager.getConnectionInfo();  
  38.             StringBuffer sb = new StringBuffer();  
  39.             sb.append("\n获取BSSID属性(所连接的WIFI设备的MAC地址):" + wifiInfo.getBSSID());  
  40.             // sb.append("getDetailedStateOf()  获取客户端的连通性:");  
  41.             sb.append("\n\n获取SSID 是否被隐藏:" + wifiInfo.getHiddenSSID());  
  42.             // IP地址转化为字符串格式  
  43.             sb.append("\n\n获取IP 地址:" +  Formatter.formatIpAddress(wifiInfo.getIpAddress()));  
  44.             sb.append("\n\n获取连接的速度:" + wifiInfo.getLinkSpeed());  
  45.             sb.append("\n\n获取Mac 地址(手机本身网卡的MAC地址):" + wifiInfo.getMacAddress()==null?"No Wifi Device":wifiInfo.getMacAddress());  
  46.             sb.append("\n\n获取802.11n 网络的信号:" + wifiInfo.getRssi());  
  47.             sb.append("\n\n获取SSID(所连接的WIFI的网络名称):" + wifiInfo.getSSID());  
  48.             sb.append("\n\n获取具体客户端状态的信息:" + wifiInfo.getSupplicantState());  
  49.             Log.i("@@@@@@@@@@@@NetworkReceiver", "连接wifi的信息:\n"+sb.toString());  
  50.               
  51.         } else if (wifi == State.DISCONNECTED || wifi == State.DISCONNECTING) {  
  52.             Log.i("@@@@@@@@@@@@NetworkReceiver", "断开wifi");  
  53.         }         
  54.           
  55.     }  
  56. }  


step2. 配置BroadcastReceiver和相关权限

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  2. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <!-- 检测网络 -->  
  2. <receiver android:name=".NetworkReceiver" >  
  3.     <intent-filter>  
  4.         <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />  
  5.     </intent-filter>  
  6.      <!-- 开机启动的广播 -->    
  7.     <intent-filter>    
  8.         <action android:name="android.intent.action.BOOT_COMPLETED"/>    
  9.     </intent-filter>    
  10. </receiver>  


下面是通过logcat打印出来的信息

当wifi连接上时候的信息:

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. I/@@@@@@@@@@@@NetworkReceiver( 1653): 网络连接类型为WIFI  
  2. I/@@@@@@@@@@@@NetworkReceiver( 1653): 连接wifi  
  3. I/@@@@@@@@@@@@NetworkReceiver( 1653): 连接wifi的信息:  
  4. I/@@@@@@@@@@@@NetworkReceiver( 1653):   
  5. I/@@@@@@@@@@@@NetworkReceiver( 1653): 获取BSSID属性(所连接的WIFI设备的MAC地址):20:dc:e6:71:10:e6  
  6. I/@@@@@@@@@@@@NetworkReceiver( 1653):   
  7. I/@@@@@@@@@@@@NetworkReceiver( 1653): 获取SSID 是否被隐藏:false  
  8. I/@@@@@@@@@@@@NetworkReceiver( 1653):   
  9. I/@@@@@@@@@@@@NetworkReceiver( 1653): 获取IP 地址:192.168.1.115  
  10. I/@@@@@@@@@@@@NetworkReceiver( 1653):   
  11. I/@@@@@@@@@@@@NetworkReceiver( 1653): 获取连接的速度:48cc:b2:55:58:f2:02  
  12. I/@@@@@@@@@@@@NetworkReceiver( 1653):   
  13. I/@@@@@@@@@@@@NetworkReceiver( 1653): 获取802.11n 网络的信号:-49  
  14. I/@@@@@@@@@@@@NetworkReceiver( 1653):   
  15. I/@@@@@@@@@@@@NetworkReceiver( 1653): 获取SSID(所连接的WIFI的网络名称):FORMIKE  
  16. I/@@@@@@@@@@@@NetworkReceiver( 1653):   
  17. I/@@@@@@@@@@@@NetworkReceiver( 1653): 获取具体客户端状态的信息:COMPLETED  

当wifi断开时候的信息:

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. I/@@@@@@@@@@@@NetworkReceiver( 1653): 无网络连接  
  2. I/@@@@@@@@@@@@NetworkReceiver( 1653): 断开wifi  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值