Android开发实验之通过WifiManager监听Wifi信号强弱
先来了解下android如何获取wifi的信息:
wifimanager wifi_service = (wifimanager)getsystemservice(wifi_service);
wifiinfo wifiinfo = wifi_service.getconnectioninfo();
其中wifimanager是管理wifi的最重要的类,详细请参考
https://developer.android.com/reference/android/net/wifi/wifimanager.html
其中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已断则值为-200。
界面很简单,只有一个imageview用来显示图片,activity_main.xml:
用于获得信号强度并改变图片的activity:mainactivity
package com.my.phonesingle; import java.util.timer; import java.util.timertask; import android.annotation.suppresslint; import android.app.activity; import android.net.wifi.wifiinfo; import android.net.wifi.wifimanager; import android.os.bundle; import android.os.handler; import android.os.message; import android.widget.imageview; import android.widget.toast; public class mainactivity extends activity { private wifiinfo wifiinfo = null; //获得的wifi信息 private wifimanager wifimanager = null; //wifi管理器 private handler handler; private imageview wifi_image; //信号图片显示 private int level; //信号强度值 @suppresslint("handlerleak") @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); //图片控件初始化 wifi_image = (imageview) findviewbyid(r.id.wifi_image); // 获得wifimanager wifimanager = (wifimanager) getsystemservice(wifi_service); // 使用定时器,每隔5秒获得一次信号强度值 timer timer = new timer(); timer.scheduleatfixedrate(new timertask() { @override public void run() { wifiinfo = wifimanager.getconnectioninfo(); //获得信号强度值 level = wifiinfo.getrssi(); //根据获得的信号强度发送信息 if (level <= 0 && level >= -50) { message msg = new message(); msg.what = 1; handler.sendmessage(msg); } else if (level < -50 && level >= -70) { message msg = new message(); msg.what = 2; handler.sendmessage(msg); } else if (level < -70 && level >= -80) { message msg = new message(); msg.what = 3; handler.sendmessage(msg); } else if (level < -80 && level >= -100) { message msg = new message(); msg.what = 4; handler.sendmessage(msg); } else { message msg = new message(); msg.what = 5; handler.sendmessage(msg); } } }, 1000, 5000); // 使用handler实现ui线程与timer线程之间的信息传递,每5秒告诉ui线程获得wifiinto handler = new handler() { @override public void handlemessage(message msg) { switch (msg.what) { // 如果收到正确的消息就获取wifiinfo,改变图片并显示信号强度 case 1: wifi_image.setimageresource(r.drawable.single4); toast.maketext(mainactivity.this, "信号强度:" + level + " 信号最好", toast.length_short) .show(); break; case 2: wifi_image.setimageresource(r.drawable.single3); toast.maketext(mainactivity.this, "信号强度:" + level + " 信号较好", toast.length_short) .show(); break; case 3: wifi_image.setimageresource(r.drawable.single2); toast.maketext(mainactivity.this, "信号强度:" + level + " 信号一般", toast.length_short) .show(); break; case 4: wifi_image.setimageresource(r.drawable.single1); toast.maketext(mainactivity.this, "信号强度:" + level + " 信号较差", toast.length_short) .show(); break; case 5: wifi_image.setimageresource(r.drawable.single0); toast.maketext(mainactivity.this, "信号强度:" + level + " 无信号", toast.length_short) .show(); break; default: //以防万一 wifi_image.setimageresource(r.drawable.single0); toast.maketext(mainactivity.this, "无信号", toast.length_short).show(); } } }; } }
然后只需要打开wifi测试一下,就行啦!
下一篇: Android开发之断点续传(下载)