Android App内WiFi扫描及连接

扫描筛选固定前缀的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]) 
		}
	} 
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: App Inventor是一个由麻省理工学院开发的图形化编程平台,使用户能够轻松地创建Android应用程序。其中包括了Wifi模块,可以作为应用程序中的一个组件使用。 使用App Inventor的Wifi模块,开发者可以访问现有的Wifi网络和热点。这些网络可以是私人或公共,只要设备连接到它,应用程序就可以访问。此外,开发者还可以使用这个模块来创建自己的热点,允许其他设备连接。 在App Inventor中使用这个模块的一种实用方法是,与其他设备进行通信。例如,如果有两个Android设备,它们可以通过Wifi网络通信,或者通过其中一个设备创建的热点进行通信。这使得开发者可以创建广泛的应用程序,例如实时多人游戏,或者可以使用手机作为远程控制器的应用程序。 此外,使用App Inventor的Wifi模块,可以帮助开发者实现代码自动化。例如,可以使用热点功能创建一个自动化程序,使设备定期备份,并上传到云端进行存储。这样,如果发生设备故障或丢失,用户的数据就可以得到保护。 总之,App Inventor的Wifi模块可以帮助开发者创建有用的应用程序,并扩展他们的代码能力。它提供了非常多的可能性,可以用于实现许多不同的功能。 ### 回答2: App Inventor 是一款由 Google 开发的可视化编程工具,它能够让用户创建自己的 Android 应用程序。在使用 App Inventor 开发应用程序时,如果想要应用程序能够与互联网进行通信,其中最重要的一步就是配置应用的 WiFi 连接。这也是使用 App Inventor 开发 WiFi 应用程序的基本步骤之一。 要在 App Inventor 中使用 WiFi 连接,首先需要在开发环境中添加一个 WiFi 组件。然后可以在代码块界面中使用这个 WiFi 组件,来实现应用程序与互联网之间的通信。使用 App Inventor 开发 WiFi 应用程序还需要了解一些必要的知识,例如如何管理 WiFi 连接、如何获取网络状态、如何使用网络通信等。接下来只需要按照这些知识进行开发即可。 总之,App Inventor 是一款非常好用的可视化编程工具,可帮助用户轻松开发自己的 Android 应用程序。而在其中开发 WiFi 应用程序,可以为用户提供更加便捷、高效的应用服务。 ### 回答3: App Inventor是一种用于开发移动应用程序的图形化编程环境。WiFi是一种无线通信技术,可让设备通过无线网络进行通信。 在App Inventor中,我们可以使用WiFi组件来实现与WiFi网络的通信。使用WiFi组件,可以轻松地在应用程序中实现连接WiFi网络的功能,如扫描WiFi网络、连接到特定网络、断开连接等等。此外,我们还可以使用WiFi组件来实现热点功能,将设备作为WiFi热点,使其他设备能够连接到该设备,从而实现移动互联。 App Inventor的WiFi组件还可以与其他组件配合使用,例如Web组件,我们可以使用Web组件来访问其他设备的Web服务器,从而实现通过WiFi网络与其他设备进行通信的功能。 总之,App Inventor的WiFi组件为开发人员提供了一种方便快捷的方式来实现WiFi网络通信功能,为移动应用程序的开发提供了更多的可能性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值