在androi中WIFI信息的获取可以通过系统提供的WIFI Service获取 1. WifiManager wifi_service = (WifiManager)getSystemService(WIFI_SERVICE); 2. WifiInfo wifiInfo = wifi_service.getConnectionInfo(); 其中WifiInfo 中比较常用的信息有: 01. /* 02. info.getBSSID(); 获取BSSID地址。 03. info.getSSID(); 获取SSID地址。 需要连接网络的ID 04. info.getIpAddress(); 获取IP地址。4字节Int, XXX.XXX.XXX.XXX 每个XXX为一个字节 05. info.getMacAddress(); 获取MAC地址。 06. info.getNetworkId(); 获取网络ID。 07. info.getLinkSpeed(); 获取连接速度,可以让用户获知这一信息。 08. info.getRssi(); 获取RSSI,RSSI就是接受信号强度指示 09. */ 同时可以通过接收系统的广播,获取当前WIFI的状态 1. /* 2. WifiManager.WIFI_STATE_DISABLING 正在停止 3. WifiManager.WIFI_STATE_DISABLED 已停止 4. WifiManager.WIFI_STATE_ENABLING 正在打开 5. WifiManager.WIFI_STATE_ENABLED 已开启 6. WifiManager.WIFI_STATE_UNKNOWN 未知 7. */ 以下给出具体的实例:
1.在布局文件中增加一个WIFI图标,和显示具体信息的文本 (activity_wifi_example.xml) 01. < LinearLayout xmlns:android = "http://schemas./apk/res/android" 02. xmlns:tools = "http://schemas./tools" 03. android:layout_width = "match_parent" 04. android:layout_height = "match_parent" 05. android:gravity = "center" 06. android:orientation = "vertical" > 07. 08. < ImageButton 09. android:id = "@+id/Icon_WifiStatus" 10. android:layout_width = "wrap_content" 11. android:layout_height = "wrap_content" 12. android:src = "@drawable/ic_wifi" /> 13. 14. < TextView 15. android:id = "@+id/Label_WifiDetail" 16. android:layout_width = "wrap_content" 17. android:layout_height = "wrap_content" 18. android:maxWidth = "320dp" /> 19. 20. </ LinearLayout > 2. 为WIFI图标添加一组可选的图标,在drawable-hdpi目录下增加ic_wifi.xml文件,内容如下: 1. < level-list xmlns:android = "http://schemas./apk/res/android" > 2. < item android:maxLevel = "0" android:drawable = "@drawable/ic_wifi_s0" /> 3. < item android:maxLevel = "50" android:drawable = "@drawable/ic_wifi_s3" /> 4. < item android:maxLevel = "70" android:drawable = "@drawable/ic_wifi_s2" /> 5. < item android:maxLevel = "100" android:drawable = "@drawable/ic_wifi_s1" /> 6. </ level-list > 注意需要导入用到的图片 3.在代码中接收WIFI状态广播,开启一个500ms的Timer实时查询WIFI状态 (WifiExample.java) 001. package com.example.wifiexample; 002. 003. import android.app.Activity; 004. import android.content.BroadcastReceiver; 005. import android.content.Context; 006. import android.content.Intent; 007. import android.content.IntentFilter; 008. import android.net.wifi.WifiInfo; 009. import android.net.wifi.WifiManager; 010. import android.os.Bundle; 011. import android.os.Handler; 012. import android.util.Log; 013. import android.view.Menu; 014. import android.widget.ImageButton; 015. import android.widget.TextView; 016. 017. public class WifiExample extends Activity { 018. 019. private final String TAG = "WifiExample" ; 020. 021. private IntentFilter mWifiIntentFilter; 022. private BroadcastReceiver mWifiIntentReceiver; 023. 024. private ImageButton mIconWifi; 025. private TextView mLabelWifi; 026. private Handler mHandler; 027. 028. @Override 029. public void onCreate(Bundle savedInstanceState) { 030. super .onCreate(savedInstanceState); 031. setContentView(R.layout.activity_wifi_example); 032. 033. mIconWifi = (ImageButton)findViewById(R.id.Icon_WifiStatus); 034. mLabelWifi = (TextView)findViewById(R.id.Label_WifiDetail); 035. 036. mWifiIntentFilter = new IntentFilter(); 037. mWifiIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); 038. 039. mWifiIntentReceiver = new mWifiIntentReceiver(); 040. registerReceiver(mWifiIntentReceiver, mWifiIntentFilter); 041. 042. mHandler = new Handler(); 043. mHandler.post( new TimerProcess()); 044. } 045. 046. @Override 047. public boolean onCreateOptionsMenu(Menu menu) { 048. getMenuInflater().inflate(R.menu.activity_wifi_example, menu); 049. return true ; 050. } 051. 052. private class TimerProcess implements Runnable{ 053. public void run() { 054. showWIFIDetail(); 055. mHandler.postDelayed( this , 500 ); 056. } 057. } 058. 059. public void showWIFIDetail() 060. { 061. WifiInfo info = ((WifiManager)getSystemService(WIFI_SERVICE)).getConnectionInfo(); 062. mIconWifi.setImageLevel(Math.abs(info.getRssi())); 063. 064. /* 065. info.getBSSID(); 获取BSSID地址。 066. info.getSSID(); 获取SSID地址。 需要连接网络的ID 067. info.getIpAddress(); 获取IP地址。4字节Int, XXX.XXX.XXX.XXX 每个XXX为一个字节 068. info.getMacAddress(); 获取MAC地址。 069. info.getNetworkId(); 获取网络ID。 070. info.getLinkSpeed(); 获取连接速度,可以让用户获知这一信息。 071. info.getRssi(); 获取RSSI,RSSI就是接受信号强度指示 072. */ 073. 074. int Ip = info.getIpAddress(); 075. String strIp = "" + (Ip & 0xFF ) + "." + ((Ip >> 8 ) & 0xFF ) + "." + ((Ip >> 16 ) & 0xFF ) + "." + ((Ip >> 24 ) & 0xFF ); 076. 077. mLabelWifi.setText( "BSSID : " + info.getBSSID() + "\nSSID : " + info.getSSID() + 078. "\nIpAddress : " + strIp + "\nMacAddress : " + info.getMacAddress() + 079. "\nNetworkId : " + info.getNetworkId() + "\nLinkSpeed : " + info.getLinkSpeed() + "Mbps" + 080. "\nRssi : " + info.getRssi()); 081. info.getIpAddress(); 082. } 083. 084. private class mWifiIntentReceiver extends BroadcastReceiver{ 085. 086. public void onReceive(Context context, Intent intent) { 087. 088. WifiInfo info = ((WifiManager)getSystemService(WIFI_SERVICE)).getConnectionInfo(); 089. mIconWifi.setImageLevel(Math.abs(info.getRssi())); 090. 091. /* 092. WifiManager.WIFI_STATE_DISABLING 正在停止 093. WifiManager.WIFI_STATE_DISABLED 已停止 094. WifiManager.WIFI_STATE_ENABLING 正在打开 095. WifiManager.WIFI_STATE_ENABLED 已开启 096. WifiManager.WIFI_STATE_UNKNOWN 未知 097. */ 098. 099. switch (intent.getIntExtra( "wifi_state" , 0 )) { 100. case WifiManager.WIFI_STATE_DISABLING: 101. Log.d(TAG, "WIFI STATUS : WIFI_STATE_DISABLING" ); 102. break ; 103. case WifiManager.WIFI_STATE_DISABLED: 104. Log.d(TAG, "WIFI STATUS : WIFI_STATE_DISABLED" ); 105. break ; 106. case WifiManager.WIFI_STATE_ENABLING: 107. Log.d(TAG, "WIFI STATUS : WIFI_STATE_ENABLING" ); 108. break ; 109. case WifiManager.WIFI_STATE_ENABLED: 110. Log.d(TAG, "WIFI STATUS : WIFI_STATE_ENABLED" ); 111. break ; 112. case WifiManager.WIFI_STATE_UNKNOWN: 113. Log.d(TAG, "WIFI STATUS : WIFI_STATE_UNKNOWN" ); 114. break ; 115. } 116. } 117. } 118. } 4.最后在AndroidManifest.xml增加获取WIFI权限的支持 1. < uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" /> |
|