【问题标题】:Android - Programatically close the Wi-Fi dialog/panelAndroid - 以编程方式关闭 Wifi 对话框/面板
【发布时间】: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


    【解决方案1】:

    看起来我发现了一个似乎可行的 hack,并且可能是 gopro 应用程序所做的。这个想法是在您启动 Wifi 设置面板后保留对您当前活动的引用。一旦您检测到 Wifi 已启用,请致电

       yourPreviousActivity.startActivity(yourPreviousActivityIntent) 
    

    意图代表您之前所在的屏幕。您需要在意图中添加以下标志:

       FLAG_ACTIVITY_CLEAR_TOP
    

    最终结果是您的活动重新启动并且设置面板被隐藏。 如果你有任何动画在打开时运行,你会想要禁用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 2014-09-01
      • 2021-02-25
      • 2011-09-17
      • 2018-07-19
      • 2014-07-22
      相关资源
      最近更新 更多