得到當前已串連的wifi資訊
WifiManager wifi_service = (WifiManager)getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifi_service.getConnectionInfo();
其中wifiInfo有以下的方法:
wifiinfo.getBSSID();
wifiinfo.getSSID();
wifiinfo.getIpAddress();擷取IP地址。
wifiinfo.getMacAddress();擷取MAC地址。
wifiinfo.getNetworkId();擷取網路ID。
wifiinfo.getLinkSpeed();擷取連線速度,可以讓使用者獲知這一資訊。
wifiinfo.getRssi();擷取RSSI,RSSI就是接受訊號強度指示。在這可以直 接和華為提供的Wi-Fi訊號閾值進行比較來提供給使用者,讓使用者對網路或地理位置做出調整來獲得最好的串連效果。
這裡得到訊號強度就靠wifiinfo.getRssi();這個方法。
得到的值是一個0到-100的區間值,是一個int型資料,其中0到-50表示訊號最好,-50到-70表示訊號偏差,小於-70表示最差,有可能串連不上或者掉線。
這裡我做的是根據訊號強度來更換圖片。設定設定檔wifi_sel.xml如下:
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="50" android:drawable="@drawable/library_template_05" />
<item android:maxLevel="70" android:drawable="@drawable/library_template_05_2" />
<item android:maxLevel="100" android:drawable="@drawable/library_template_05_3" />
</level-list>
注意這裡都是絕對值,因為在imageView.setImageLevel(level)時,level必須是絕對值,否則程式會報告null 指標。
接下來就是註冊偵聽,和android 電池偵聽顯示類似
// wifi相關
IntentFilter wifiIntentFilter; // wifi監聽器
在oncreate方法中加入:
// wifi
wifiIntentFilter = new IntentFilter();
wifiIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
然後再:
// 聲明wifi訊息處理過程
private BroadcastReceiver wifiIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int wifi_state = intent.getIntExtra("wifi_state", 0);
int level = Math.abs(((WifiManager)getSystemService(WIFI_SERVICE)).getConnectionInfo().getRssi());
Log.i(Global.TAG, "1111:" + level);
switch (wifi_state) {
case WifiManager.WIFI_STATE_DISABLING:
Log.i(Global.TAG, "1111:" + WifiManager.WIFI_STATE_DISABLING);
wifi_image.setImageResource(R.drawable.wifi_sel);
wifi_image.setImageLevel(level);
break;
case WifiManager.WIFI_STATE_DISABLED:
Log.i(Global.TAG, "2222:" + WifiManager.WIFI_STATE_DISABLED);
wifi_image.setImageResource(R.drawable.wifi_sel);
wifi_image.setImageLevel(level);
break;
case WifiManager.WIFI_STATE_ENABLING:
wifi_image.setImageResource(R.drawable.wifi_sel);
wifi_image.setImageLevel(level);
Log.i(Global.TAG, "33333:" + WifiManager.WIFI_STATE_ENABLING);
break;
case WifiManager.WIFI_STATE_ENABLED:
Log.i(Global.TAG, "4444:" + WifiManager.WIFI_STATE_ENABLED);
wifi_image.setImageResource(R.drawable.wifi_sel);
wifi_image.setImageLevel(level);
break;
case WifiManager.WIFI_STATE_UNKNOWN:
Log.i(Global.TAG, "5555:" + WifiManager.WIFI_STATE_UNKNOWN);
wifi_image.setImageResource(R.drawable.wifi_sel);
wifi_image.setImageLevel(level);
break;
}
}
};
在onResume方法中註冊,在onPause方法中銷毀:
@Override
protected void onResume() {
super.onResume();
// 註冊wifi訊息處理器
registerReceiver(wifiIntentReceiver, wifiIntentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(wifiIntentReceiver);
}
最後加入許可權:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
註明:QQ技術交流群:108614806 感興趣的加一下。