gpt4 book ai didi

安卓 10/API 29 : how to connect the phone to a configured network?

转载 作者:行者123 更新时间:2023-11-30 04:58:08 25 4
gpt4 key购买 nike

我正在开发一个用户必须遵循以下步骤的应用程序:

  1. 将手机连接到wifi;
  2. 将手机连接到已连接对象的专用热点。

当用户连接到连接对象的专用热点时,应用程序会执行一些 HTTP 请求以对其进行配置。然后,我想自动将应用程序重新连接到步骤 1 的全局 wifi。

从 API 21 到 API 28 这个功能很容易实现,因为我知道我也想重新连接手机的 SSID。只需几行代码即可完成:

private fun changeCurrentWifiNetworkLegacy(ssidToConnect: String) {
val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager

var ssidIdentifier: Int? = null

wifiManager.configuredNetworks?.forEach { config ->
Log.d("SSID", config.SSID)

if (config.SSID == "\"${ssidToConnect}\"") {
ssidIdentifier = config.networkId
}
}

ssidIdentifier?.let { id ->
wifiManager.enableNetwork(id, true)
}
}

根据这篇文章,在 API 29 上,这个简单的代码不再有效:https://developer.android.com/about/versions/10/privacy/changes#configure-wifi

根据这篇文章,现在,我应该使用 2 个类:WifiNetworkSpecifier 和/或 WifiNetworkSuggestion

不幸的是,我找不到使用这些类将用户连接到之前配置的 SSID 的工作示例。

有人已经做到了吗?

预先感谢您的帮助。

最佳答案

以防万一任何可怜的人遇到这种情况,API 完全有可能在您的设备上被破坏了。在我的 OnePlus 5、Android 10、Build 200513 上,发生了这种情况:

  1. 调用请求网络。不管我使用的是 Listener 还是 PendingIntent 版本
  2. 操作系统找到网络、连接、onAvailable 并调用 friend
  3. 操作系统立即断开连接。我可以在 logcat 中看到“App released request, canceling NetworkRequest”
  4. 然而,这不是真的 - 请求没有被取消,Android 意识到这一点,并再次开始连接到网络的过程。转到 2. 并永远重复。

为此创建了一个 Android 错误:https://issuetracker.google.com/issues/158344328

此外,如果您没有以正确的顺序终止您的应用程序和对话框,您可以让操作系统进入不再显示“要使用的设备”对话框的状态,只有重新启动才有帮助。

为自己省去麻烦,以 Android 9 为目标并使用 WifiManager API(如果您以 10 为目标,这些 API 很有用)。它甚至比新的 requestNetwork API 具有更好的用户体验。

关于安卓 10/API 29 : how to connect the phone to a configured network?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58769623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com