基础知识:

Android的wifi信息获取先要自学相关基础知识,下面是相关基础知识。

获取系统wifi服务

// 获取系统wifi服务
WifiManage wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
// 获取当前所连接wifi的信息
WifiInfo wi = wm.getConnectionInfo();
// 获取扫描到的所有wifi信息
List<ScanResult> scanResults = 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的RSSI1

ScanResult类方法

scanResult.SSID();
scanResult.BSSID();
scanResult.level();    // 信号强度(原始数据)WifiManager.calculateSignalLevel(scanResult.level(),5); // 计算强度等级,此处分5级。

利用多线程实现数据的持续性采集

安卓中事件处理的原则:所有可能耗时的操作都放到其他线程去处理。根据这一原则,我们将wifi系统服务获取、信息获取等都放在一个线程中实现,定义每500ms采样一次。这样为主线程瘦身就能大大加快应用程序响应时间,改善用户体验。由于自己也刚接触Android多线程,这里就不多说了,感兴趣的同学可以去上网搜索相关内容。

代码展示

下面的是activity_main.xml文件中的代码,第二个布局控件LinearLayout设为垂直滚动视图,以便显示足够多的wifi信息。

<?xml version="1.0" encoding="utf-8"?<android.support.constraint.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.lenovo.wifi_bluetooth.MainActivity"><RelativeLayoutandroid:id="@+id/relativelayout1"android:gravity="start|center_vertical"android:layout_width="368dp"android:layout_height="wrap_content"><LinearLayoutandroid:id="@+id/Curr_connected_wifi"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:orientation="vertical"><TextViewandroid:id="@+id/testView1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/str2"/><EditTextandroid:id="@+id/et1"android:layout_width="match_parent"android:layout_height="wrap_content"android:cursorVisible="false"android:focusable="false"android:focusableInTouchMode="false" /></LinearLayout><ScrollViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/Curr_connected_wifi"android:scrollbars="vertical"android:fadingEdge="vertical"><LinearLayoutandroid:id="@+id/list_wifi"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:id="@+id/testView2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/str1" /><EditTextandroid:id="@+id/et2"android:layout_width="match_parent"android:layout_height="wrap_content"android:cursorVisible="false"android:focusable="false"android:focusableInTouchMode="false" /></LinearLayout></ScrollView></RelativeLayout></android.support.constraint.ConstraintLayout>

接下来是文件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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);new tvThread().start();}private class tvThread extends Thread {@Overridepublic void run() {while (true) {runOnUiThread(new Runnable() {@Overridepublic 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列表信息List<ScanResult> scanResults = 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文件中添加如下代码以开启权限:

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>

大功告成,这是我的测试结果:
height="498" width="710" src="http://player.youku.com/player.php/sid/XMjkyNDY1NDMwOA==/v.swf">

http://blog.csdn.net/zd_1471278687/article/details/12158367
http://blog.csdn.net/zd_1471278687/article/details/12158367


  1. “RSSI”全称为“Received Signal Strength Indication”,即(接收)信号强度指示。在这里返回一个0~-100之间的int型数据。一般而言,大小在0~-50表示信号最好,-50~-70信号较差,小于-70信号最差,可能连接不上或掉线,通常值为-200时表示wifi已断。 ↩

Android连续获取当前所连接WiFi及周围热点列表信息的解决方案相关推荐

  1. IP地址的获取—分析从连接WiFi到上网的全过程(二)

    IP地址的获取-分析从连接WiFi到上网的全过程(二) - 墨天轮 聊一聊IP产生的背景和作用 在介绍获取IP地址进行通信之前,也许会产生这样一个疑问.MAC地址在全球范围内是唯一时,为什么我们不使用 ...

  2. 一、ubuntu16.04下无法连接wifi(试遍所有方法及解决方案)

    问题描述:前一天正常使用,第二天突然没网,右上角网络标识无连接(非扇形),且不显示附近的wifi信息. 注:由于安装的是双系统不是虚拟机,在win下解决的方案未尝试. 操作1: 以前也遇到过,等等或者 ...

  3. uni-app Android端获取设备已连接的WiFi IP地址

    1.manifest.json 在APP权限配置或源码中,添加需要的权限: android.permission.ACCESS_WIFI_STATE android.permission.INTERN ...

  4. Android wifi开发包含列表获取点击连接wifi

    注意:编译sdk版本 minSdk 21 targetSdk 28 亲自测试,在Android10上正常使用 包依赖 implementation 'com.thanosfisherman.elvis ...

  5. 【Android App】检查手机连接WiFi信息以及扫描周围WiFi的讲解及实战(附源码和演示 超详细必看)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 一.检查是否连接WiFi以及输出WiFi信息 传统的定位方式不适用于室内的垂直定位,原因如下: (1)卫星定位要求没有障碍物遮挡,它在户外比较精准,在 ...

  6. Android开机启动检测和连接wifi检测

    Android启动时,会发出一个系统广播 ACTION_BOOT_COMPLETED,它的字符串常量表示为 "android.intent.action.BOOT_COMPLETED&quo ...

  7. Android 10 上使用WifiNetworkSpecifier 连接WiFi后http请求失败 Connection failed

    问题描述:在连接设备热点的开发中,使用WifiNetworkSpecifier连上设备热点,再切换回原网络后,http请求一直报SocketException: Connection failed ( ...

  8. android 获取手机蓝牙是否与其他设备蓝牙配对连接成功,android开发获取手机已连接的蓝牙设备(包括已链接的设备和已经配对绑定的设备)...

    在应用开发中有时会碰到操作蓝牙设备的需求,这时就需要获取手机已连接的蓝牙设备,其中"已连接"是广泛含义,其实蓝牙设备分为可链接设备(比如:蓝牙音箱 蓝牙耳机) 和可绑定设备(比如: ...

  9. php 遍历所有网站网址,使用selenium获取网址所加载所有资源url列表信息

    抓取数据时,经常遇到有的数据是通过ajax异步调取的,如何通过selenium获取网址所加载的全部请求url地址了,即我们打开开发者工具里面network中记录的请求url列表,可以参考下面代码 #  ...

  10. Android 反射、代理调用系统隐藏API方法与接口类连接Wi-Fi

    本文转载自:http://www.xwdoor.net/android-reflection-proxy-call-system-hidden-api-method-and-interface-cla ...

最新文章

  1. 获取文件最后修改时间的VC代码
  2. 数字图像处理1:基本概念
  3. IE Cookie文件格式说明
  4. 必须正确理解的---ng指令中的compile与link函数解析
  5. linux——编写Shell脚本常用命令:diff、patch、cut、sort、uniq、、||、test、tr
  6. entry for sde instance not found in services file解决方法[转]
  7. outlook邮箱限额满了
  8. ARM汇编中lr(r14)寄存器的作用
  9. 计算机结构优化,计算机结构与程序优化.ppt
  10. 从蚂蚁金服实践入手,带你深入了解 Service Mesh
  11. js中解析json字符串
  12. 【项目合作】最高50万元!道路缝隙检测、目标跟踪优化、机器人平台开发
  13. 实战 | GitLab + Docker 实现多环境部署
  14. python selenium语法_Python+Selenium基本语法
  15. 怎样在神经网络设计中加入先验信息 - 权值共享
  16. 视频播放组件实战【LivePlayer H5播放器】
  17. vmware虚拟机使用多显示器
  18. python画太阳花输出为图片文件
  19. 手写签名提取工具(图片)
  20. twitter、facebook、pinterest、linkedin 分享代码

热门文章

  1. 百度地图3D棱柱鼠标事件
  2. 【调剂】大连理工大学电子信息与电气工程学部2022年硕士研究生招生考试调剂缺额与报名通知...
  3. 学计算机打字,学电脑打字用什么方法学的最快
  4. 完美解决win10代理被自动篡改
  5. 请问下C#做UG二次开发,需要再UF函数里输入UI界面中用户输入的值,怎么修改double和char*的类型?
  6. 【STM32】STM32之霍尔检测电机归位时掉电
  7. 怎样助眠效果最好,失眠多年的朋友总结了这几个方法
  8. Leetcode 2359. 找到离给定两个节点最近的节点
  9. 低功耗设计-ir drop的signoff corner怎么选择?
  10. raylib一些示例代码