Android:检测wifi接入点是否仍在范围内

时间:2015-04-07 20:40:48

标签: android

我有一种方法来检测可用的wifi访问点。我的方法效果很好,但是当我不在范围内时,我仍然在我的xml文件中显示的最后扫描结果的SSID,尽管我超出了这个SSID的范围。



	private void check_wifi_available() {
		WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);

		if (!wifi.isWifiEnabled()) {
			Toast.makeText(this, "Please turn your Wi-Fi on",
					Toast.LENGTH_SHORT).show();

		}
		
		
		

		WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
		final List<ScanResult> results = wifiManager.getScanResults();
		if (results != null) {
			// list of access points from the last scan
			List<ScanResult> updatedResults = new ArrayList<ScanResult>();
			// pick Wi-Fi access points which begins with these "SV-"
			// characters.
			for (int i = 0; i < results.size(); i++) {
				String ssid = results.get(i).SSID;
				// Pattern p = Pattern.compile("^KD-(4[0-9]{2}|500)$");
				// Matcher m = p.matcher(ssid);
				// if(m.matches()){}else{}
				if (ssid.startsWith("KD")) {

					updatedResults.add(results.get(i));
				}
			}
			if (updatedResults.size() > 0) {
				String a = deliverBestAccessPoint(updatedResults);
				textWifi.setText(a.toString());
			}
		}
	}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

最好由操作系统处理。您可以做的最好的事情是设置一个计时器,以定期扫描WiFi设备并更新结果。

除此之外,在root设备上,您可以手动向接入点/路由器发送802.11请求,并对回复进行超时检查。

澄清一下:操作系统在扫描设备时发出广播消息并报告它从哪个设备回来。当设备朝向“范围”的边缘时,即使连接和维护连接存在问题,它们也可以报告为可用,因为信号不够强。

编辑:

对于它的价值,ScanResult有一个“级别”成员变量来报告信号强度。您可以对低强度结果进行更精细的过滤。 http://developer.android.com/reference/android/net/wifi/ScanResult.html