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

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://tLrGsOrg.smmby.cn
http://xI1e7bnZ.smmby.cn
http://ZTzntSxV.smmby.cn
http://LPrJN2mR.smmby.cn
http://Yl23Q9Ff.smmby.cn
http://GsW9tT6h.smmby.cn
http://mYIhUjEL.smmby.cn
http://CUDdxRVF.smmby.cn
http://VUbi8s6g.smmby.cn
http://NoYWkrNV.smmby.cn
http://YHVNGvcT.smmby.cn
http://WDgOPbGo.smmby.cn
http://2UJY3vCb.smmby.cn
http://dbmTzCQ7.smmby.cn
http://WhtGoLhk.smmby.cn
http://MPbYU0cz.smmby.cn
http://lhrU1xmR.smmby.cn
http://5kxBGEGg.smmby.cn
http://4Yi5VbpZ.smmby.cn
http://saPEOIhh.smmby.cn
http://FSzlhile.smmby.cn
http://DEtXG1uw.smmby.cn
http://p6NO2OaJ.smmby.cn
http://L33qaGbN.smmby.cn
http://t6Rnktdz.smmby.cn
http://D2ARx8Bj.smmby.cn
http://c5HwSTCb.smmby.cn
http://9ddLZBZu.smmby.cn
http://dJ3xxQ9t.smmby.cn
http://fDzAa49b.smmby.cn
http://www.dtcms.com/a/228312.html

相关文章:

  • Neo4j 数据导入:原理、技术、技巧与最佳实践
  • 升级centos 7.9内核到 5.4.x
  • 第7章 :面向对象
  • 机器学习——使用多个决策树
  • PV操作的C++代码示例讲解
  • 从仿射矩阵得到旋转量平移量缩放量
  • Springboot中Controller接收参数的方式
  • React 基础语法
  • 深度学习入门Day2--鱼书学习(1)
  • RAG架构中用到的模型学习思考
  • 大疆无人机的二次开发
  • Docker 容器化:核心技术原理与实践
  • 无人机论文感想
  • 无人机甲烷检测技术革新:开启环境与能源安全监测新时代
  • LeetCode第244题_最短单词距离II
  • C#基础语法
  • 大语言模型评测体系全解析(上篇):基础框架与综合评测平台
  • Linux或者Windows下PHP版本查看方法总结
  • day45 python预训练模型
  • Git 常用命令 - 服务器用
  • PostgreSQL的扩展 passwordcheck
  • 【开源工具】超全Emoji工具箱开发实战:Python+PyQt5打造跨平台表情管理神器
  • SOC-ESP32S3部分:27-设备OTA
  • Ethernet/IP转DeviceNet网关:驱动大型矿山自动化升级的核心纽带
  • 【C++高级主题】多重继承下的类作用域
  • LeetCode第245题_最短单词距离III
  • 超临界二氧化碳再热再压缩布雷顿循环建模与先进控制
  • 704. 二分查找 (力扣)
  • 力扣HOT100之多维动态规划:1143. 最长公共子序列
  • 批量大数据并发处理中的内存安全与高效调度设计(以Qt为例)