当前位置: 首页 > article >正文

Android 11以上App主动连接WIFI的完整方案

早期Android版本App内连接指定的WIFI还是比较简单的,但是随着Android版本的提升,限制也越来越多。以下是一套完整的Android 11以上的WIFI应用内主动连接方案。

第一步:添加到建议连接:

val wifiManager = getSystemService(WIFI_SERVICE) as WifiManager//一定要加,不然切换指定WIFI无效
wifiManager.removeNetworkSuggestions(wifiManager.networkSuggestions)
val suggestion = WifiNetworkSuggestion.Builder().setSsid(ssid).setWpa2Passphrase((pwd)).setIsAppInteractionRequired(false).build()
val suggestionsList = ArrayList<WifiNetworkSuggestion>()
suggestionsList.add(suggestion)
val status: Int = wifiManager.addNetworkSuggestions(suggestionsList)
if (status == WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) {}

但是这里有一个问题:这个是建议,不一定能连上。这就很让人难受!

第二步:监听网络状态:

private val networkCallback = object : ConnectivityManager.NetworkCallback() {override fun onAvailable(network: Network) {super.onAvailable(network)Log.d(TAG, "用户已连接到网络")val capabilities = mConnectivityManager!!.getNetworkCapabilities(network)Log.d(TAG, "$capabilities")if (capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) == true) {// 获取当前连接的WiFi信息val wifiInfo = wifiManager!!.connectionInfoLog.d(TAG, "wifi info = $wifiInfo")if (wifiInfo.ssid == String.format("\"%s\"", TEST_WIFI_SSID))) {Log.d(TAG, "用户已连接到建议的网络")Prefs.isWifiConnected = truePrefs.currentWifiSsid = wifiInfo.ssid}}}override fun onUnavailable() {super.onUnavailable()Log.d(TAG, "用户未连接到建议的网络")clearWifiState()}}mConnectivityManager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager// 注册回调
val request = NetworkRequest.Builder().addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build()
mConnectivityManager?.registerNetworkCallback(request, networkCallback)

第三步:如果10s内未主动连接上,跳转到WIFI设置页(注意:到这个页面也会主动连接,目测基本100%成功率)

lifecycleScope.launch {delay(10_000)if (!Prefs.isWifiConnected) {val intent = Intent(Settings.ACTION_WIFI_SETTINGS)startActivity(intent)}}

http://www.lryc.cn/news/2400914.html

相关文章:

  • [蓝桥杯]模型染色
  • 力扣上C语言编程题
  • 卡西欧模拟器:Windows端功能强大的计算器
  • 鸿蒙OSUniApp结合机器学习打造智能图像分类应用:HarmonyOS实践指南#三方框架 #Uniapp
  • 机器学习基础(三) 逻辑回归
  • 系统调试——ADB 工具
  • Qwen-3 微调实战:用 Python 和 Unsloth 打造专属 AI 模型
  • 微软Build 2025:Copilot Studio升级,解锁多智能体协作未来
  • 设计模式——系统数据建模设计
  • 解决docker运行zentao 报错:ln: failed to create symbolic link ‘/opt/zbox/tmp/mysq
  • Spring Boot MVC自动配置与Web应用开发详解
  • OA工程自动化办公系统 – 免费Java源码
  • Apache IoTDB V2.0.3 发布|新增元数据导入导出脚本适配表模型功能
  • 某校体育场馆结构自动化监测
  • MySQL 9.0 相较于 MySQL 8.0 引入了多项重要改进和新特性
  • Android 3D球形水平圆形旋转,旋转动态更换图片
  • 数据结构与算法学习笔记(Acwing 提高课)----动态规划·树形DP
  • FTP 和 SFTP 介绍及 C/C++ 实现分析
  • leetcode hot100刷题日记——36.最长连续序列
  • CentOS7关闭防火墙、Linux开启关闭防火墙
  • PyTorch——搭建小实战和Sequential的使用(7)
  • 基于大模型的腔隙性脑梗塞风险预测及治疗方案研究
  • Python 开发效率秘籍:PyCharm、VS Code 与 Anaconda 配置与实战全解
  • [C]C语言日志系统宏技巧解析
  • 自动驾驶系统研发系列—激光雷达感知延迟:自动驾驶安全的隐形隐患?
  • 内网应用如何实现外网访问?无公网IP本地端口网址服务提供互联网连接
  • 大话软工笔记—组合要素1之要素
  • oracle从表B更新拼接字段到表A
  • 平台化 LIMS 系统架构 跨行业协同与资源共享的实现路径
  • RedisTemplate查询不到redis中的数据问题(序列化)