android.net.wifi的簡單使用方法

來源:互聯網
上載者:User

 擷取Wifi的控制類WifiManager。
 WifiManager  wm=(WifiManager)getSystemService(Context.WIFI_SERVICE);
接下來可以對wifi操作了,比如要開啟、關閉wifi,可以通過WifiManager的setWifiEnabled()方法來開關wifi。
若要查看一些資訊,可以通過getConnectionInfo()方法得到WifiInfo類的對象,WifiInfo類裡主要提供手機wifi上面儲存的串連資訊。
WifiInfo類方法:
1、getBSSID()
  擷取存取點的mac地址(String)
2、getIpAddress()
擷取原生IP地址   (int)
3、getLinkSpeed()
擷取連線速度(不是下載速度),單位為Mbps  (int)
4、getMacAddress()
擷取mac地址  (String)
5、getNetworkId()
   擷取網路id號。每一個設定好了的網路都有一個獨一無二的整數型ID號,用來識別網路,當操作請求時(翻譯)。簡而言之,就是這個號就是代表一個連接點,手機可以通過wifi串連很多無線網的。
6、getRssi()
      返回收到的訊號強度,是個負數。(好像到-113就表示一點訊號都沒有,也就是說數越大訊號就越好)
7、getSSID()
   擷取無線訊號提供者的名稱  (就是要連的網路的名字)(String)
上面那個類只能查到原生mac地址與ip,要只查看原生詳細資料,可以通過這個類:DhcpInfo df=wm.getDhcpInfo();
DhcpInfo類沒什麼方法,提供了一些欄位:
1、dns1  第一個DNS
2、dns2 如上
3、gateway  網關
4、ipAddress  IP地址
5、netmask 子網路遮罩
6、serverAddress 服務端地址(其實就是路由器ip,和網關一樣)
7、leaseDuration  和上面的getLinkSpeed()
方法的值接近,可能是連線速度,不過單位不是Mbps,getLinkSpeed()
得到72,這個欄位的值是7200

上面的IP與網關、子網路遮罩等都是int型數值,直接看看不懂,附上一個我寫的方法把int轉成String類型。

    private String intToString(int a){    StringBuffer sb=new StringBuffer();    int b=(a>>0)&0xff;    sb.append(b+".");    b=(a>>8)&0xff;    sb.append(b+".");    b=(a>>16)&0xff;    sb.append(b+".");    b=(a>>24)&0xff;    sb.append(b);return sb.toString();    }

WifiConfiguration 類主要提供一個wifi配置的所有資訊
有如下欄位(自己明白的不一定正確):
BSSID 存取點的mac地址。
SSID    存取點的名字。
networkId  網路號
preSharedKey  WPA-PSK密碼,如果有就會得到一個*(這玩意就是判斷是不是有密碼的)
priority   優先順序

status   串連狀態,值是WifiConfiguration.Status中欄位的一種。

WifiConfiguration.Status  提供了3個欄位表示wifi串連的三種狀態
1.CURRENT   值為0,表示處於串連狀態
2.DISABLED   值為1,表示網路不可用
3. ENABLED   值為2,表示網路可用但沒串連

ScanResult  wifi掃描到的存取點資訊
1.BSSID
2.SSID 
3.capabilities
4.frequency
5.level

關於接收WIFI狀態改變接收廣播資訊:

ACTION:  WifiManager.WIFI_STATE_CHANGED_ACTION ( "android.net.wifi.WIFI_STATE_CHANGED")wifi狀態變化觸發,觸發兩次。

可接收兩個資訊:(鍵)

  1. WifiManager.EXTRA_PREVIOUS_WIFI_STATE("previous_wifi_state") int型值  intent.getIntExtra("鍵",0);(第二個為得不到時的預設值)

  2. WifiManager.EXTRA_WIFI_STATE("wifi_state") int型值   intent.getIntExtra("鍵",0);(第二個為得不到時的預設值)

ACTION: WifiManager.NETWORK_STATE_CHANGED_ACTION("android.net.wifi.STATE_CHANGE")串連wifi才觸發,開啟後觸發兩次(向地址發起串連與已串連上)

可接收兩個資訊:(鍵)

  1. WifiManager.EXTRA_BSSID("bssid")         String類型值      intent.getStringExtra("鍵")

  2. WifiManager.EXTRA_NETWORK_INFO("networkInfo")    T    getParcelableExtra(“鍵”)

ACTION: WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION( "android.net.wifi.supplicant.CONNECTION_CHANGE") 判斷是否WIFI開啟了,變化觸發一次

可接收一個資訊:(鍵)

  1. WifiManager.EXTRA_SUPPLICANT_CONNECTED("connected")    boolean類型傳回值   intent.getBooleanExtra(“鍵”, true)第二個是預設值

ACTION: WifiManager.SUPPLICANT_STATE_CHANGED_ACTION("android.net.wifi.supplicant.STATE_CHANGE")發送WIFI串連的過程資訊,如果出錯ERROR資訊才會收到。串連WIFI時觸發,觸發多次。

可接收兩個資訊:(鍵)

  1. WifiManager.EXTRA_NEW_STATE("newState")           intent.getParcelableExtra("鍵")

  2. WifiManager.EXTRA_SUPPLICANT_ERROR("supplicantError")        int型值  getIntExtra(“鍵”, int)

WIFI狀態int值對應的狀態:

 WifiManager.WIFI_STATE_DISABLED ==1

 WifiManager.WIFI_STATE_DISABLING ==0

 WifiManager. WIFI_STATE_ENABLED==3

 WifiManager. WIFI_STATE_ENABLING==2

 WifiManager. WIFI_STATE_UNKNOWN==4

上面的是在有wifi的環境下測的,沒在沒WIFI的環境下測,不一定準,但差不多了。測試機型HTC G17。

如果在串連WIFI的過程中(Connecting),去串連網路地址(比如http://www.baidu.com)會得到找不到地址的異常,並且在8秒左右之內(就測了一台定製機),不能串連這一地址,否則報找不到地址異常。

這個包並不判斷網路連接狀態,只是判斷wifi的各種狀態,如果需要判斷網路狀態, 在android.net包中。ConnectivityManager 。 



//判斷WIFI是否串連
private boolean isConnected(Context context){ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);System.out.println(ni.getState());System.out.println(ni.getDetailedState()+"-----");if(ni.getState()==State.CONNECTED)return true;return false;}

private boolean isWifiConected(Context context) {WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);List<WifiConfiguration> list = wm.getConfiguredNetworks();Iterator<WifiConfiguration> it = list.iterator();while (it.hasNext()) {WifiConfiguration wc = it.next();if (wc.status == WifiConfiguration.Status.CURRENT)return true;}return false;}//2012.11.12在4.0機器上發現這個方法一直返回false,估計我理解錯了,不要用。

WifiInfo不為空白並不代表這個類裡面就存了資訊,getMacAdress可能為空白。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.