Android App内WiFi扫描及连接

本文详细介绍了在Android应用中实现WiFi扫描和连接的步骤,包括权限检查、WiFi列表扫描、筛选显示、连接特定WiFi等。针对Android 10以上的系统变化,如无法直接打开WiFi开关以及更新的连接API使用进行了说明。
摘要由CSDN通过智能技术生成

扫描筛选固定前缀的AP热点显示,点击列表item连接WiFi

一、功能梳理

1.权限检查

2.WiFi列表扫描

3.WiFi扫描结果筛选显示

4.连接特定wifi

二、WiFi扫描与连接需要申请的权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" tools:ignore="ProtectedPermissions" />

三、代码实现

1、获取WifiManager

val manager:WifiManager = context.applicationContext     .getSystemService(Context.WIFI_SERVICE) as WifiManager

2、打开wifi开关

Android 10 不支持代码打开WiFi开关,需要用户跳转系统界面自行打开开关

manager?.let {
       
    if (!manager!!.isWifiEnabled) {
          
    if (Build.VERSION.SDK_INT < 29) {
               
        manager!!.isWifiEnabled = true        
    } else{
   
        //Android 10 不支持代码打开WiFi开关,需要用户跳转系统界面自行打开开关
    } 
}
}

3、获取已连接Wifi信息

val wifiMgr = context.applicationContext        .getSystemService(Context.WIFI_SERVICE) as WifiManager
val info = wifiMgr.connectionInfo

4、扫描

startScan API 未来将弃用,暂未找到替代方法API 29目前可用 。

The ability for apps to trigger scan requests will be removed in a future release.

manager!!.startScan()

扫描结果

可以通过监听广播监听扫描是否完成,“ { SCAN_RESULTS_AVAILABLE_ACTION}”表示扫描结束,可读取扫描结果(扫描结果一次返回全部结果,所以如不注册广播,直接监听扫描结果列表,列表不为空,可认为一次扫描结束)

manager!!.scanResults

5、扫描结果过滤、处理

若wifi环境复杂,会扫描出很多SSID相同,BSSID不同的结果,可以过滤SSID相同的wifi,只显示信号最好的相同SSID的wifi结果

也可以根据SSID显示特定wifi结果

/** * 过滤重复ssid的wifi,只显示信号最强的 */
private fun getWifiList(list: MutableList<ScanResult>): MutableList<ScanResult>{
       
val result: MutableList<ScanResult> = mutableListOf()
for (i in 0 until list.size) {
   
	val position: Int = getItemPosition(result, list[i])
	if (position != -1) {
    
		if (list[position].level < list[i].level) {
   
			result.removeAt(position)       
		 	result.add(position, list[i]) 
		}
	} 
使用Node.js实现WiFi扫描可以使用wifiscanner模块。这个模块适用于Mac和Linux系统,并且在嵌入式设备如Raspberry Pi上也可以正常运行。安装这个模块可以使用npm install wifiscanner命令。使用这个模块可以进行扫描WiFi接入点、连接到这些接入点、列出当前的WiFi连接、断开连接和删除连接信息等功能。具体的使用方法可以参考官方文档。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [wifiscanner:一个简单的Node.js WiFi扫描仪](https://download.csdn.net/download/weixin_42102634/18506110)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [用于管理 wifi连接扫描)的 NodeJS 工具_JavaScript_代码_下载](https://download.csdn.net/download/qq_38334677/85901317)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [node-wifi::antenna_bars:NodeJS工具来管理wifi连接扫描)](https://download.csdn.net/download/weixin_42131541/18332216)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值