根据本教程,断开 vpn 服务的唯一方法是使用“系统管理对话框”。这可以通过向下拖动通知栏并从那里选择来手动完成,但这不是解决我的问题的好方法。
当按下“断开连接”按钮时,我需要能够从我的应用程序中调出此对话框,但是我找不到任何有关如何执行此操作的文档。
任何人都可以帮忙吗?
不幸的是,目前唯一公开和推荐的断开连接的方法就是通过通知。不幸的是,断开甚至打开对话框的功能被隐藏了。
当然,这并不一定意味着它们不能被访问,但是那样会带来很多痛苦。在这种特定情况下我没有尝试过这个,但我过去做过这个,很早以前,用音乐播放器找出正在播放的内容(用于音频乱码)。因此,如果您绝对必须找到一种方法来做到这一点,无论多么 hacky,那么您都可以尝试这个,但请记住,'ere be dragons - 这涉及访问您不应该访问的私有 API。该 API 可以在任何两个给定的 android 版本(不仅仅是平台版本)之间随心所欲地改变,因为它应该是私有的和内部的。您需要使您的代码对这里的故障非常有弹性,坦率地说,它永远不会比 hacky 和 PITA 更重要。
对,说了这么多,见第 171 行
这就是你想要做的。除了你看不到你需要的东西,对吧?所以你需要这个 AIDL 来提供服务(可能还有一点反思,我忘记了 - 很长时间没有这样做了)。
这篇博文描述了一些类似的东西,虽然没有很详细。很难找到谈论的事情,因为这是一种非常令人沮丧的做法。
我认为关闭 tun descript 并让服务结束就可以了。这将有效地结束 VPN(但有问题的应用程序仍将保留再次打开 VPN 的权限)。通知(钥匙符号)也将消失。如果您正在尝试另一个可能更难的应用程序的 VPNService。也许您应该向该应用程序的作者询问 API。