ps:范围0-100,数值越大信号越好。
原理:通过WifiManager获取系统wifi强度数值。
操作:点击获取wifi细信息,开始循环任务获取数值。最大最小表明在本次测试过程中的wifi信号范围,来观察信号强度和是否稳定。
点击保存,在下面会增加一条记录,记录本次的区间。然后重新获取可以是另一点wifi信号强度的区间。
因为最近要开始做路由器开发,为测试newifi智能路由器的信号强度,昨晚临时赶出来的东西,目的是为了可测试可用。如有需要可以拿去用。有很多可以优化扩展的地方,但是现在没有大块的时间和精力做。
<span style="font-size:18px;">package com.example.testwifi;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
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.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private TextView tv, max, min;
private Button btn_start, btn_add, btn_clear;
private WifiManager wifiManager;
private WifiInfo info;
private Handler handler;
private Timer timer;
private TimerTask task;
private Message msg;
private int id, maxId, minId, temp;
private int textViewMax, textViewMin;
private ListView lv;
private Map data;
private List<Map<String, Object>> list;
private SimpleAdapter adapter;
private boolean flag = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
adapter = new SimpleAdapter(getApplicationContext(), list,
android.R.layout.simple_list_item_2, new String[] {
"max", "min" }, new int[] { android.R.id.text1,
android.R.id.text2 });
lv.setAdapter(adapter);
wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
timer = new Timer();
task = new TimerTask() {
@Override
public void run() {
msg = new Message();
info = wifiManager.getConnectionInfo();
temp = id;
id = info.getRssi() + 100;
if (flag) {
msg.what = 3;
msg.arg2 = id;
flag = false;
} else {
if (id > textViewMax) {
msg.what = 1;
msg.arg2 = id;
} else if (id < textViewMin) {
msg.what = 2;
msg.arg2 = id;
}
}
msg.arg1 = id;
handler.sendMessage(msg);
}
};
btn_start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
timer.scheduleAtFixedRate(task, 200, 500);
btn.setEnabled(false);
}
});
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
int ssid = msg.arg1;
int ssidTemp = msg.arg2;
data = new HashMap<String, Object>();
if (msg.what == 1) {
max.setText("最大" + ssidTemp + "");
textViewMax = ssidTemp;
} else if (msg.what == 2) {
min.setText("最小" + ssidTemp + "");
textViewMin = ssidTemp;
} else if (msg.what == 3) {
textViewMax = ssidTemp;
textViewMin = ssidTemp;
max.setText("最大" + ssidTemp + "");
min.setText("最小" + ssidTemp + "");
}
tv.setText("-----" + ssid);
data.put("max", "最大" + textViewMax);
data.put("min", "最小" + textViewMin);
}
};
btn_add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
list.add(data);
adapter.notifyDataSetChanged();
System.out.println(list);
flag = true;
}
});
btn_clear.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
list.clear();
adapter.notifyDataSetChanged();
}
});
}
private void init() {
tv = (TextView) findViewById(R.id.tv);
max = (TextView) findViewById(R.id.max);
min = (TextView) findViewById(R.id.min);
btn_start = (Button) findViewById(R.id.btn);
btn_add = (Button) findViewById(R.id.btn2);
btn_clear = (Button) findViewById(R.id.btnClear);
lv = (ListView) findViewById(R.id.lv);
list = new ArrayList<Map<String, Object>>();
}
}</span>
xml文件
<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="hi"
android:textSize="30dp" />
<LinearLayout
android:id="@+id/ll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv"
android:orientation="horizontal" >
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取wifi信息" />
<Button
android:id="@+id/btn_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存" />
<Button
android:id="@+id/btnClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="清除列表"
/>
</LinearLayout>
<TextView
android:id="@+id/max"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/ll"
android:text="最大"
android:textSize="20dp" />
<TextView
android:id="@+id/min"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/max"
android:text="最小"
android:textSize="20dp" />
<TextView
android:id="@+id/state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/min"
android:text="50-100最好,30-50差,30以下最差"
android:textSize="22dp" />
<ListView
android:id="@+id/lv"
android:background="#a1a1a1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/state" />
</RelativeLayout></span>
权限:
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />