如何解决Android-以编程方式关闭Wi-Fi对话框/面板
Android 29放弃了以编程方式启用/禁用手机的Wi-Fi界面的功能。我正在处理的应用程序以编程方式连接到外部wi-fi设备(p2p,没有出站互联网)。如果未启用wi-fi,我们会要求用户启用它。 here中记录了一个新的系统UI面板API。我们可以向用户显示一个基本的切换开关,以通过以下方式启用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 运气不好(唯一可见的活动是在我的应用中声明的活动已在堆栈中)
有什么想法吗?
解决方法
似乎我发现了一个似乎可以起作用的黑客,并且可能是gopro应用程序所做的事情。这个想法是在启动Wifi设置面板后保留对当前活动的引用。一旦检测到启用了Wifi,请致电
yourPreviousActivity.startActivity(yourPreviousActivityIntent)
,其意图代表您先前所在的屏幕。您将需要在意图中添加以下标志:
FLAG_ACTIVITY_CLEAR_TOP
最终结果是您的活动被重新启动,并且设置面板被隐藏。 如果您打开了任何动画,则将其禁用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。