【发布时间】:2020-10-07 23:08:41
【问题描述】:
Android 29 已放弃以编程方式启用/禁用手机 Wi-Fi 接口的功能。我处理的应用程序以编程方式连接到外部 wi-fi 设备(p2p,无出站互联网)。如果未启用 wi-fi,我们会要求用户启用它。 记录了一个新的系统 UI 面板 API here。我们可以通过这个向用户展示一个基本的切换开关来启用 wi-fi:
startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
启用 Wi-Fi 后,我们将通过以下描述的过程进行连接:
例如:
val ssid = ssidObtainedExternally()
val psk = pskObtainedExternally()
val specifier = WifiNetworkSpecifier.Builder()
.setSsid(ssid)
.setWpa2Passphrase(psk)
.build()
val request = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.setNetworkSpecifier(specifier)
.build()
connectivityManager.requestNetwork(request, networkCallback)
但是,这样做的一个问题是,在用户将切换开关切换为启用后,相同的对话框将开始显示可用 Wi-Fi 网络的列表,这可能会诱使客户选择 Wi-Fi 设备(因为SSID 只是他们知道的设备名称)。由于我们将以编程方式连接,因此我们不希望用户尝试手动选择 Wi-Fi 网络,因为他们不知道 PSK。理想的做法是在他们将开关切换为启用后立即关闭对话框。
我在 GoPro 8 上对此进行了测试,该应用似乎有一种机制,可以在用户切换开关后关闭对话框。
到目前为止,我已经尝试了一些事情,但都没有运气。我尝试使用Application.registerActivityLifecycleCallbacks,但它没有选择正在创建、启动或恢复的设置面板。
我也在这里尝试了提示:https://stackoverflow.com/a/32929066/94557 没有运气(唯一可见的活动是在我的应用程序中声明的堆栈中的活动)
有什么想法吗?
【问题讨论】:
标签: android android-wifi