当前位置: 首页 > 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)}}

相关文章:

  • 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 常用命令 - 服务器用
  • 罗定市城乡规划建设局网站/网站运营维护的基本工作
  • 网站制作 价格/磁力宝
  • 建委网证书查询/seo岗位工作内容
  • 成都科技网站建设哪里有/微信小程序开发费用
  • 修改网站搜索缩略图/怎么推广
  • 广告英语/免费seo营销软件