Android App内WiFi扫描及连接

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

扫描筛选固定前缀的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]) 
		}
	} 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值