package com.lenovo.xiaoshan.test;import android.app.Activity;import android.bluetooth.BluetoothAdapter;import android.content.Context;import android.content.Intent;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;import android.os.Bundle;import android.widget.TextView;/** * 获取手机WIFI的MAC地址 * @author 单红宇 * */public class GetmacipinfoActivity extends Activity {/** Called when the activity is first created. */private static final int REQUEST_ENABLE_BT = 3;private WifiManager mWifi;private String WifiMac;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);mWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);if (!mWifi.isWifiEnabled()) {mWifi.setWifiEnabled(true);}WifiInfo wifiInfo = mWifi.getConnectionInfo();if ((WifiMac = wifiInfo.getMacAddress()) == null) {WifiMac = "No Wifi Device";}TextView mac = (TextView) findViewById(R.id.macView);mac.setTextSize(16);//查看已经连接上的WIFI信息,在Android的SDK中为我们提供了一个叫做WifiInfo的对象,这个对象可以通过WifiManager.getConnectionInfo()来获取。WifiInfo中包含了当前连接中的相关信息。//getBSSID()  获取BSSID属性//getDetailedStateOf()  获取客户端的连通性//getHiddenSSID()  获取SSID 是否被隐藏//getIpAddress()  获取IP 地址//getLinkSpeed()  获取连接的速度//getMacAddress()  获取Mac 地址//getRssi()  获取802.11n 网络的信号//getSSID()  获取SSID//getSupplicanState()  获取具体客户端状态的信息StringBuffer sb = new StringBuffer();sb.append("\n获取BSSID属性(所连接的WIFI设备的MAC地址):" + wifiInfo.getBSSID());//sb.append("getDetailedStateOf()  获取客户端的连通性:");sb.append("\n\n获取SSID 是否被隐藏:"+ wifiInfo.getHiddenSSID());sb.append("\n\n获取IP 地址:" + wifiInfo.getIpAddress());sb.append("\n\n获取连接的速度:" + wifiInfo.getLinkSpeed());sb.append("\n\n获取Mac 地址(手机本身网卡的MAC地址):" + WifiMac);sb.append("\n\n获取802.11n 网络的信号:" + wifiInfo.getRssi());sb.append("\n\n获取SSID(所连接的WIFI的网络名称):" + wifiInfo.getSSID());sb.append("\n\n获取具体客户端状态的信息:" + wifiInfo.getSupplicantState());mac.setText("WIFI网络信息:  " + sb.toString() + "\n\n蓝牙MAC:  " + btMac);}}


Android 的wifi状态可以分为两大类,两者均可通过广播监听,相应的Action在WifiManager类中:

 

第一类:有无wifi源及各个状态间转变

可监听 WIFI_STATE_CHANGED_ACTION。(如下图所示,双击图片可放大)

有五种情况:

1-1 disabled

1-2 disabling

1-3 enable

1-4 enabling

1-5 unknown

 

可通过不同的Extra值,见下图(双击可放大)获得状态常量:

代码如下:

   
  1. if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {//在此监听wifi有无 
  2.             int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0); 
  3.              
  4.             switch (wifiState) { 
  5.             case WifiManager.WIFI_STATE_DISABLED: 
  6.                 updateWifiStatus(R.drawable.wifi_disable); 
  7.                 Toast.makeText(mContext, R.string.wifi_disable, 
  8.                         Toast.LENGTH_LONG).show(); 
  9.                 break
  10.             case WifiManager.WIFI_STATE_DISABLING: 
  11.                 break
  12.             case WifiManager.WIFI_STATE_ENABLED: 
  13.                 updateWifiStatus(R.drawable.wifi_enable); 
  14.                 Toast.makeText(mContext, R.string.wifi_enable, 
  15.                         Toast.LENGTH_LONG).show(); 
  16.                 break
  17.             case WifiManager.WIFI_STATE_ENABLING: 
  18.                 break
  19.             case WifiManager.WIFI_STATE_UNKNOWN: 
  20.                 break
  21.             } 
  22.         }  

 

也可通过以下代码实现:

   
  1. //另外一种方式 
  2.         mWifiMng = (WifiManager) mContext 
  3.                 .getSystemService(mContext.WIFI_SERVICE); 
  4.          
  5.         switch (mWifiMng.getWifiState()) { 
  6.         case WifiManager.WIFI_STATE_DISABLED: 
  7.             updateWifiStatus(R.drawable.wifi_disable); 
  8.             Toast.makeText(mContext, R.string.wifi_disable, 
  9.                     Toast.LENGTH_LONG).show(); 
  10.             break
  11.         case WifiManager.WIFI_STATE_DISABLING: 
  12.             break
  13.         case WifiManager.WIFI_STATE_ENABLED: 
  14.             updateWifiStatus(R.drawable.wifi_enable); 
  15.             Toast.makeText(mContext, R.string.wifi_enable, 
  16.                     Toast.LENGTH_LONG).show(); 
  17.             break
  18.         case WifiManager.WIFI_STATE_ENABLING: 
  19.             break
  20.         case WifiManager.WIFI_STATE_UNKNOWN: 
  21.             break
  22.         } 

 

第二类:wifi是否连接正常

 

可监听:NETWORK_STATE_CHANGED_ACTION(如下图所示,双击图片可放大)

有两种状况:

2-1连接

2-1未连接

在OnReceiver方法中,通过不同Extra值,获得连接状况,如下图,双击图片放大:

代码如下: 

   
  1. if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {  
  2.             Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);  
  3.             if (null != parcelableExtra) {  
  4.                 NetworkInfo networkInfo = (NetworkInfo) parcelableExtra;  
  5.                 boolean isConnected = networkInfo.isAvailable();  
  6.                 updateNetworkStatus();  
  7.             }  
  8.         } 

 


更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. Android(安卓)带有可滑动效果的用户引导页slidingtutorial-andro
  3. 运用IntentService类下载文件
  4. 获取Bitmap和对Bitmap的操作工具类
  5. Android导航栏滑动折叠效果
  6. android 下获取apk的icon
  7. adb 命令集及常用命令
  8. Android(安卓)7.0之后无摄像头调用闪关灯
  9. android 获取rom名称和版本号

随机推荐

  1. android Gallery实现加载网络图片
  2. Android(安卓)Studio 常用技巧
  3. Android(安卓)getText(int resId)和getSt
  4. RelativeLayout的布局学习(部分知识点)
  5. 获取Android设备的方向
  6. 5.17学习内容 android判断软键盘状态、系
  7. android实现开机自启动服务
  8. Android开发之屏幕属性
  9. 【Android(安卓)okhttp源码解析 四】任务
  10. Android(安卓)Installation error: INSTA