Android开发之扫描附近wifi热点并列表显示

Android 11 热点(softap)流程分析(二) WifiManager--AIDL 通过softap 来理解Android 11 stable aidl的调用流程 阅读详情

 最近项目中用到了wifi模块,今天做一个简单的总结。

参考:http://www.2cto.com/kf/201310/253617.html

1.怎样获取wifi对象并进行操作
要操作WIFI设备,需要先获取Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这个对象来管理WIFI设备。
 
addNetwork(WifiConfiguration config) 添加一个config描述的WIFI网络,默认情况下,这个WIFI网络是DISABLE状态的。
calculateSignalLevel(int rssi , int numLevels) 计算信号的等级
compareSignalLevel(int rssiA, int rssiB) 对比网络A和网络B的信号强度
createWifiLock(int lockType, String tag) 创建一个WIFI 锁,锁定当前的WIFI连接
disableNetwork(int netId) 让一个网络连接失效
disconnect() 断开当前的WIFI连接
enableNetwork(int netId, Boolean disableOthers) 连接netId所指的WIFI网络,并是其他的网络都被禁用
getConfiguredNetworks() 获取网络连接的状态
getConnectionInfo() 获取当前连接的信息
getDhcpInfo() 获取DHCP 的信息
getScanResulats() 获取扫描测试的结果
getWifiState() 获取当前WIFI设备的状态
isWifiEnabled() 判断WIFI设备是否打开
pingSupplicant() ping操作,和PC的ping操作相同作用
ressociate() 重新连接WIFI网络,即使该网络是已经被连接上的
reconnect() 重新连接一个未连接上的WIFI网络
removeNetwork() 移除某一个网络
saveConfiguration() 保留一个配置信息
setWifiEnabled() 让一个连接有效
startScan() 开始扫描
updateNetwork(WifiConfiguration config) 更新一个网络连接
2.常用的wifi状态
WIFI_STATE_DISABLED WIFI网卡不可用 
WIFI_STATE_DISABLING WIFI网卡正在关闭 
WIFI_STATE_ENABLED WIFI网卡可用 
WIFI_STATE_ENABLING WIFI网卡正在打开 
WIFI_STATE_UNKNOWN WIFI网卡状态不可知
3.列表查看有连接信号的wifi热点
ScanResult对象就是用来表示附近wifi热点的属性的,可以通过WifiManager.getScanResults()返回一个ScanResult列表,后面我附上查看附近wifi热点的demo,ScanResult的重要属性有一下几个:
BSSID 接入点的地址
SSID 网络的名字,唯一区别WIFI网络的名字
Capabilities 网络接入的性能
Frequency 当前WIFI设备附近热点的频率(MHz)
Level 所发现的WIFI网络信号强度
4.连接wifi热点
通过WifiManager.getConfiguredNetworks()方法会返回WifiConfiguration对象的列表,然后再调用WifiManager.enableNetwork();方法就可以连接上指定的热点。
5.查看已经连接上的wifi信息
WifiInfo是专门用来表示连接的对象,这个对象可以通过WifiManager.getConnectionInfo()来获取。WifiInfo中包含了当前连接中的相关信息。
 
getBSSID() 获取BSSID属性
getDetailedStateOf() 获取客户端的连通性
getHiddenSSID() 获取SSID 是否被隐藏
getIpAddress() 获取IP 地址
getLinkSpeed() 获取连接的速度
getMacAddress() 获取Mac 地址
getRssi() 获取802.11n 网络的信号
getSSID() 获取SSID
getSupplicanState() 获取具体客户端状态的信息
在wifi操作中常用的类和方法就这些,下面给出一个列表显示wifi热点的demo。
 
1.activity的布局很简单就是一个ListView,activity_wifi_list.xml内容如下:
[ html]  
<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"  
    android:paddingBottom="@dimen/activity_vertical_margin"  
    android:paddingLeft="@dimen/activity_horizontal_margin"  
    android:paddingRight="@dimen/activity_horizontal_margin"  
    android:paddingTop="@dimen/activity_vertical_margin"  
    tools:context=".WifiListActivity" >  
  
    <ListView  
        android:id="@+id/listView"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content" >  
    </ListView>  
  
</RelativeLayout>  
2.ListView的item布局文件item_wifi_list.xml内容如下:
[html] 
<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent" >  
  
    <ImageView  
        android:id="@+id/imageView"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignParentLeft="true"  
        android:layout_alignParentTop="true"  
        android:src="@drawable/ic_launcher" />  
  
    <TextView  
        android:id="@+id/textView"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignBottom="@+id/imageView"  
        android:layout_marginBottom="14dp"  
        android:layout_toRightOf="@+id/imageView"  
        android:text="TextView" />  
  
    <TextView  
        android:id="@+id/signal_strenth"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignBaseline="@+id/textView"  
        android:layout_alignBottom="@+id/textView"  
        android:layout_alignParentRight="true"  
        android:text="TextView" />  
  
</RelativeLayout>  
3.下面就activity的代码了,这里需要自己自定义列表。
[java]  
public class WifiListActivity extends Activity {  
  
    private WifiManager wifiManager;  
    List<ScanResult> list;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_wifi_list);  
        init();  
    }  
  
    private void init() {  
        wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);  
        openWifi();  
        list = wifiManager.getScanResults();  
        ListView listView = (ListView) findViewById(R.id.listView);  
        if (list == null) {  
            Toast.makeText(this, "wifi未打开!", Toast.LENGTH_LONG).show();  
        }else {  
            listView.setAdapter(new MyAdapter(this,list));  
        }  
          
    }  
      
    /** 
     *  打开WIFI 
     */  
    private void openWifi() {  
       if (!wifiManager.isWifiEnabled()) {  
        wifiManager.setWifiEnabled(true);  
       }  
        
    }  
  
    public class MyAdapter extends BaseAdapter {  
  
        LayoutInflater inflater;  
        List<ScanResult> list;  
        public MyAdapter(Context context, List<ScanResult> list) {  
            // TODO Auto-generated constructor stub  
            this.inflater = LayoutInflater.from(context);  
            this.list = list;  
        }  
  
        @Override  
        public int getCount() {  
            // TODO Auto-generated method stub  
            return list.size();  
        }  
  
        @Override  
        public Object getItem(int position) {  
            // TODO Auto-generated method stub  
            return position;  
        }  
  
        @Override  
        public long getItemId(int position) {  
            // TODO Auto-generated method stub  
            return position;  
        }  
  
        @Override  
        public View getView(int position, View convertView, ViewGroup parent) {  
            // TODO Auto-generated method stub  
            View view = null;  
            view = inflater.inflate(R.layout.item_wifi_list, null);  
            ScanResult scanResult = list.get(position);  
            TextView textView = (TextView) view.findViewById(R.id.textView);  
            textView.setText(scanResult.SSID);  
            TextView signalStrenth = (TextView) view.findViewById(R.id.signal_strenth);  
            signalStrenth.setText(String.valueOf(Math.abs(scanResult.level)));  
            ImageView imageView = (ImageView) view.findViewById(R.id.imageView);  
            //判断信号强度,显示对应的指示图标  
            if (Math.abs(scanResult.level) > 100) {  
                imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_0));  
            } else if (Math.abs(scanResult.level) > 80) {  
                imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_1));  
            } else if (Math.abs(scanResult.level) > 70) {  
                imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_1));  
            } else if (Math.abs(scanResult.level) > 60) {  
                imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_2));  
            } else if (Math.abs(scanResult.level) > 50) {  
                imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_3));  
            } else {  
                imageView.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_wifi_signal_4));  
            }  
            return view;  
        }  
  
    }  
  
}  
程序运行效果图如下:

参考:http://www.open-open.com/lib/view/open1377702950526.html

ESP32 开发笔记(三)源码示例 14_WIFI_Scan 附近WIFI信号扫描示例 开发板购买链接 https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft=t&id=626366733674 开发板简介开发环境搭建 windows 源码示例: 0_Hello Bug (ESP_LOGX与printf) 工程模板/打印调试输出 1_LED LED亮灭控制 ... 阅读详情

相关推荐

Android入门项目(六)Android的wifi开发,androidwifi开发教程

boolean isUpdated = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false); Log.i(TAG, "onReceive: WIFI扫描 " + (isUpdated ? “完成” : “未完成”)); } else { Log.i(TAG, “onReceive: WIFI扫描完成”); } Message scanResultsMessage = Message.obtain(); scanResultsMe

m0_64319242的博客 2823

android wifi讲解 wifi列表显示

转自:http://www.2cto.com/kf/201310/253617.html 最近项目中用到了wifi模块,今天做一个简单的总结。 1.怎样获取wifi对象并进行操作 要操作WIFI设备,需要先获取Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这个对象来管理WIFI设备。

静心 2147

Android附近基站+Wifi+IP+GPS多渠道定位方案

本文主要介绍了使用使用基站+Wifi+IP+GPS多渠道定位的实现方案和相关的Android源码,主要包括Google service SDK的GPS获取方式,获取手机附近基站信息的相关Android API,扫描手机wifi环境的Android API,谷歌提供的基站+Wifi热点+IP定位 API的调用方法。并且阐述了多渠道定位结果的择优策略和省电策略。并且介绍了一下在开发这套功能期间碰到几个细节上的问题。力图构建一套准确完整的手机客户端地理位置解决方案

lvshaorong的博客 2万+

使用Android的WiFiManager管理WiFi状态

通过使用Android的WiFiManager,我们可以轻松地管理设备的WiFi状态,包括打开/关闭WiFi、扫描可用网络和连接到指定网络。这为我们的移动体验增添了更多便利性。无论是在家中还是在外出,通过管理WiFi状态,我们能够更好地掌控我们的网络连接。希望这篇对你有所帮助!

qq_36733726的博客 2086

Android 蓝牙通信及WiFi开发

在我们正常的Android蓝牙功能开发步骤中,一般要经过系统权限和蓝牙开关状态监测、设备扫描、设备连接、蓝牙数据通信这几个过程。 在Android 4.3系统之后,我们可以使用蓝牙4.0(低功耗蓝牙),它最主要的特点是低功耗,普及率高。现在所说的蓝牙设备,大部分都是在说4.0设备,ble也特指4.0设备。 在4.0之前重要的版本有2.1版本-基本速率/增强数据率(BR/EDR)和3.0 高速蓝牙版

Bug不知所起,一往而深。 5566

Android wifi探究二:Wifi framework层源码分析

上一篇博客初步认识了wpa_supplicant的作用和使用方法,并且尝试着梳理了wifi的大框架,不过,java层的框架我们忽略了,没有分析,也就是说上一篇博客非常肤浅的支出了wifi代码的结构,仅此而已,那么这篇博客,将尝试梳理wifi的java层框架。

阳光玻璃杯 1万+

android 图片热点区域,Android开发之扫描附近wifi热点并列表显示

最近项目中用到了wifi模块,今天做一个简单的总结。参考:http://www.2cto.com/kf/201310/253617.html1.怎样获取wifi对象并进行操作要操作WIFI设备,需要先获取Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这个对象来管理WIFI设备。addNetwork(WifiCon...

weixin_42502060的博客 383

使用WiFiManager库在ESP8266上进行配网和配置其他参数

它允许我们在设备上创建一个访问点(Access Point,简称AP),并通过一个简单的Web界面来配置设备的连接参数。使用WiFiManager库,我们无需在代码中硬编码WiFi网络的凭据,而是可以在设备上动态地配置它们。在本文中,我们介绍了如何使用WiFiManager库在ESP8266上进行无线网络配网和配置其他参数。WiFiManager库简化了这些任务的实现过程,使我们能够通过简单的Web界面来配置设备的连接参数。在Arduino IDE中,点击“工具”菜单,然后选择“库管理器”。

PnServer的博客 1024

Android入门项目(六)Android的wifi开发

敬请期待…

古道西风 6275

Android Wifi——网络配置(九)

前面分析了网路连接的流程,对于连接新的网络需要添加网络配置信息,然后拿到 networkId 再进行网络连接,这里我们就来看一下网络信息的配置流程。

小旭的专栏 1837

手把手教你用运放搭建方波三角波发生器(附Multisim仿真文件)

本文详细解析了使用运算放大器搭建方波和三角波发生器的核心原理与设计步骤。通过剖析迟滞比较器与积分器的联动机制,指导读者进行电路设计、元件选型,并借助Multisim仿真进行参数调优与波形优化。文章提供了从理论分析、虚拟仿真到实物焊接调试的完整实践指南,并附有仿真文件,帮助硬件爱好者与初学者深入掌握这一经典模拟电路设计。

weixin_29165725的博客 640

android 获取附近热点,Android开发周围wifi热点和属性的获取

Android开发中WiFi热点和WiFi属性的获取会经常被用到,下面就来记录下WiFi的名称、状态等属性以及获取周围WiFi热点的方法。一、获取wifi属性要获得Android系统相关的属性,通常需要获得相关的系统服务。在Android中最常用的是通过Manager来获得对对象的操作服务。WiFi相关的操作中需要用到两个Manager:WifiManager和ConnectivityManage...

weixin_36410516的博客 737

单机多环境部署apollo 2.3.0

理解apollo的整体架构后,对比nacos配置中心功能点,其设计的复杂度以及完整度相较nacos而言更为丰富 对于不同的环境,例如 FAT, PRO 在部署时进程已经完全物理隔离,并且每个环境config/adminservice依赖的数据也完全物理隔离(连接不同的db),在数据隔离与安全方面做的很完善,但同时也提升了架构的复杂度 而 portal 可以管理多个环境,单节点部署虽然有单点问题,但并不会影响业务从configservice读取配置, 挂掉只要重启就可以,只是在

Life is a starting point everywhere 1299

android 扫描wifi热点,在Android中扫描wifi热点演示实例教程

1、首先新建了布局模板XML文件vifi.xml,代码很简单,如下:android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent">android:layout_width="fill_parent"android:layout_height="wrap_...

weixin_39658759的博客 476

Cadence导入tsmcN65GP PDK的完整流程与常见问题解析

本文详细介绍了Cadence导入tsmcN65GP PDK的完整流程,包括文件解压、目录结构解析、安装脚本运行及Cadence集成配置。重点解析了常见问题如文件路径错误、权限问题和工艺库显示不全的解决方案,并提供了实战技巧与优化建议,帮助用户高效完成PDK安装与配置。

weixin_29215391的博客 546

KV Cache 详解:新手也能理解的 LLM 推理加速技巧

(Autoregressive)生成的,即每次生成一个 token,然后将其作为输入继续生成下一个 token。:如果序列太长,超过了 KV Cache 的存储限制,就需要丢弃最早的 tokens(类似滑动窗口)。时,每次只会生成一个新 token,然后再把这个 token 作为输入继续生成下一个 token。,只缓存计算过的 K,VK, V,每次只计算新 token 的 K,VK, V,从而提升推理效率。:如果输入的 prompt 发生变化,之前的 KV Cache 不能复用,必须重新计算。

Harry的博客 7364

ESP32 WIFI扫描

记录arduino ide 开发esp32笔记,基于正点原子esp32-s3

2301_77205835的博客 1779

别再搞混了!Vue3里xgplayer播放FLV视频与FLV直播流,配置到底差在哪?

本文详细解析了在Vue3项目中使用xgplayer播放FLV视频与FLV直播流的配置差异,帮助开发者避免常见错误。通过对比点播与直播的核心协议差异、插件选择及配置参数,提供实战代码示例和性能优化技巧,确保流畅播放体验。特别针对直播流场景,深入讲解专属配置和问题排查方法。

weixin_28687331的博客 150

Android中wifi讲解 显示wifi列表

WiFi列表显示相关API1、获取wifi对象并进行操作 要操作WIFI设备,需要先获取Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这个对象来管理WIFI设备。相关方法如下: addNetwork(WifiConfiguration config) 添加一个config描述的WIFI网络,默认情况下

F1186485056的博客 1759

LayaBox CommandBuffer描边使用详细

项目需要使用LayaBox做一个给3D物体动态描边的一个功能,前前后后踩了一些坑算是把这个东西给做出来了把我改好的代码贴上,分享给大家。 (1)想要使用描边你的引擎版本必须 >=2.9.0 (2)你必须下载 Laya官方的BlurShader库才能使用这个功能,下载地址:https://github.com/layabox/layaair-demo/tree/master/h5/3d/ts/LayaAir3D_PostProcess/BlurShader 下载完之后把BlurShader放到自己项目的

小智队长 1735

这可是全网网工数通方向学习路线最完整,最详细的版本,没有之一

文章篇幅较长,耐心看完你一定有所收获。

最铁头的网工博客 2万+

Android开发周围wifi热点和属性的获取

Android开发中WiFi热点的

zcdreaming的专栏 3194

【华为OD机试真题】458、堆内存申请 | 机试真题+思路参考+代码解析(CD卷)(C++、Java、Py)

题目描述 >有一个总空间为100字节的堆,现要从中新申请一块内存,内存分配原则为优先紧接着前一块已使用内存分配空间足够且最接近申请大小的空闲内存。

KJ.JK 1万+

Android wifi属性简介 及 wifi信息获取(wifi列表、配置信息、热点信息)

最后看一下学习需要的所有知识点的思维导图。如果你正愁这块不知道如何学习或者想提升学习这块知识的学习效率,那么这份学习笔记绝对是你的秘密武器!+" 信号强度:“+scanResult.level+”/n :"+wifiManager.calculateSignalLevel(scanResult.level,4));ScanResult 对象就是用来表示附近 wifi 热点的属性的,可通过 WifiManager.getScanResults() 返回一个ScanResult列表,//搜索到的设备列表。

2401_84009679的博客 1193

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 码农的产品思维培养第5节----产品需求的遴选和管理《人人都是产品经理》
下一篇: Android开发之工程作为库导入
minimicall
博客等级 码龄18年 407粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值