欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发实验之通过WifiManager监听Wifi信号强弱

程序员文章站 2022-05-03 18:06:06
先来了解下android如何获取wifi的信息: wifimanager wifi_service = (wifimanager)getsystemservice(wifi_service); wi...

先来了解下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测试一下,就行啦!