Android连续获取当前所连接WiFi及周围热点列表信息的解决方案
发布日期:2021-09-23 03:31:43
浏览次数:28
分类:技术文章
本文共 4712 字,大约阅读时间需要 15 分钟。
基础知识:
Android的wifi信息获取先要自学相关基础知识,下面是相关基础知识。
获取系统wifi服务
// 获取系统wifi服务WifiManage wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);// 获取当前所连接wifi的信息WifiInfo wi = wm.getConnectionInfo();// 获取扫描到的所有wifi信息ListscanResults = wm.getScanResults();
获取wifi信息的各种方法及异同
这里只简略地提及WifiManage, WifiInfo, ScanResult 这三个类的一些方法,如果非常感兴趣可以去安卓社区看看。废话不多说,Here we go!
WifiManage类wifi信息获取方法
wm.getConnectionInfo(); // 获取当前连接信息wm.getWifiState(); // 获取当前手机wifi网卡状态wm.getScanResults(); // 获取扫描到的wifi信息列表(返回类型是链表)
- 手机wifi网卡状态分五种情况
wifi网卡状态 详细说明 WifiManager.WIFI_STATE_ENABLED
wifi网卡可用 WifiManager.WIFI_STATE_DISABLED
wifi网卡不可用 WifiManager.WIFI_STATE_DISABLING
wifi网卡正关闭 WifiManager.WIFI_STATE_ENABLING
wifi网卡正打开 WifiManager.WIFI_STATE_UNKNOWN
状态未知
- 对应手机要开的权限如下:
权限代码 详细说明 ACCESS_WIFI_STATE 允许程序获得wifi的状态信息 INTERNET 允许程序获得手机网络权限 CHANGE_NETWORK_STATE 允许应用程序改变wifi连接状态
WifiInfo类方法
wi.getSSID(); // 获取当前连接wifi的名词wi.getBSSID(); // 获取路由器Mac地址,String类型wi.getMacAddress(); // 获取本机Mac地址wi.getRssi(); // 获取当前连接wifi的信号强度wi.getLinkSpeed(); // 获取连接速度WifiInfo.LINK_SPEED_UNITS; // 连接速度单位
wi.getRssi()
获取的就是所连接wifi的RSSI
ScanResult类方法
scanResult.SSID();scanResult.BSSID();scanResult.level(); // 信号强度(原始数据)WifiManager.calculateSignalLevel(scanResult.level(),5); // 计算强度等级,此处分5级。
利用多线程实现数据的持续性采集
安卓中:所有可能耗时的操作都放到其他线程去处理。根据这一原则,我们将wifi系统服务获取、信息获取等都放在一个线程中实现,定义每500ms采样一次。这样为主线程瘦身就能大大加快应用程序响应时间,改善用户体验。由于自己也刚接触Android多线程,这里就不多说了,感兴趣的同学可以去上网搜索相关内容。
代码展示
下面的是activity_main.xml文件中的代码,第二个布局控件LinearLayout设为垂直滚动视图,以便显示足够多的wifi信息。
接下来是文件MActivity.java代码:
package com.example.lenovo.wifi_bluetooth;import android.net.wifi.ScanResult;import java.util.List;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.EditText;public class MainActivity extends AppCompatActivity { private WifiManager wm; EditText editText1 ; EditText editText2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new tvThread().start(); } private class tvThread extends Thread { @Override public void run() { while (true) { runOnUiThread(new Runnable() { @Override public void run() { obtainListInfo(); } }); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } private void obtainListInfo(){ //----------------------------------------------> editText1 = (EditText) findViewById(R.id.et1); editText2 = (EditText) findViewById(R.id.et2); //显示扫描到的所有wifi信息 wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); WifiInfo wi = wm.getConnectionInfo(); int strength = wi.getRssi(); int speed = wi.getLinkSpeed(); String designation = wi.getSSID(); String addr = wi.getBSSID(); String unit = WifiInfo.LINK_SPEED_UNITS; if (wm.getWifiState() == WifiManager.WIFI_STATE_ENABLED) { StringBuilder listinfo = new StringBuilder(); //搜索到的wifi列表信息 ListscanResults = wm.getScanResults(); for (ScanResult sr:scanResults){ listinfo.append("wifi网络ID:"); listinfo.append(sr.SSID); listinfo.append("\nwifi MAC地址:"); listinfo.append(sr.BSSID); listinfo.append("\nwifi信号强度:"); listinfo.append(sr.level+"\n\n"); } editText2.setText(listinfo.toString()); String curr_connected_wifi=null; curr_connected_wifi="Currently connecting WiFi \'"+designation+"\' \nRssi: "+strength+ "\nMac addr: "+addr+"\nspeed: "+speed+" "+unit; editText1.setText(curr_connected_wifi.toString()); } //-------------------------------------------------------------------> }}
在AndroidManifest.xml文件中添加如下代码以开启权限:
大功告成,这是我的测试结果:
height="498" width="710" src="http://player.youku.com/player.php/sid/XMjkyNDY1NDMwOA==/v.swf">- “RSSI”全称为“Received Signal Strength Indication”,即(接收)信号强度指示。在这里返回一个0~-100之间的int型数据。一般而言,大小在0~-50表示信号最好,-50~-70信号较差,小于-70信号最差,可能连接不上或掉线,通常值为-200时表示wifi已断。
转载地址:https://blog.csdn.net/Android_bing/article/details/76136808 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月21日 09时16分47秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
java将字符串放置到剪切板
2019-04-28
Java JFrame视图
2019-04-28
Drawable图像绘制-今天咱不讲代码,只讲布局
2019-04-28
安卓中用代码设置顶部状态栏颜色
2019-04-28
如何去掉AppBarLayout的底边阴影
2019-04-28
Linux、CentOS配置JDK环境变量
2019-04-28
Android安卓进程保活(一)1像素且透明Activity
2019-04-28
Android安卓进程保活(二)设置前台Service
2019-04-28
Android安卓进程保活(三)双进程拉活(Java层)
2019-04-28
安卓Recyclerview多布局适配器
2019-04-28
安卓弹出软键盘把布局顶上去
2019-04-28
安卓状态栏透明
2019-04-28
Spring后台接收Body参数数据
2019-04-28
AndroidStudio Debug 断点调试
2019-04-28
Android 安卓MVP架构(带视频)
2019-04-28
Java变态题目(持续更新)
2019-04-28
去除IDEA黄色曲线警告线
2019-04-28
安卓ScrollView向上滑动控件顶部悬浮效果实现
2019-04-28
修改Tomcat服务器启动图标
2019-04-28
Android安卓TextView部分字体颜色
2019-04-28