java - 如何在 Android 8 和 9 上添加设置了 HttpProxy 的 WifiConfiguration

标签 java android proxy wifimanager wifi

我需要将带有代理设置的 WifiConfiguration 添加到 WifiManager。 当我不使用 sethttpProxy (我根本不添加代理)时,我可以成功添加配置,但是当我使用方法 wifiConfiguration.sethttpProxy() 然后 addNetwork(wifiConfiguration) 时,不会添加网络配置。

我已经在具有不同配置的物理设备上尝试过此操作,现在我正在模拟器上进行测试。模拟器有一个默认的 Wi-Fi 网络 AndroidWifi,我正在尝试为其添加配置。在尝试之前,我使用系统菜单删除所有“已保存的网络”,以确保我的应用程序可以创建和编辑此配置。

WifiConfiguration configuration = new WifiConfiguration();
configuration.SSID = "\"" + ssid + "\"";
configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
configuration.setHttpProxy(ProxyInfo.buildDirectProxy(proxyData.proxy_host,
                             proxyData.proxy_port, proxyData.proxy_exception));
wifiManager.addNetwork(configuration);

addNetwork 返回 -1,我收到类似的错误

E/WifiConfigManager:UID 10086 无权修改代理设置“AndroidWifi”NONE。必须具有 NETWORK_SETTINGS,或者是设备或配置文件的所有者。 E/WifiConfigManager:无法添加/更新网络AndroidWifi

最佳答案

正如您收到的错误中所述,您需要拥有 NETWORK_SETTINGS 权限或者是设备/配置文件所有者。这是自 Android 8 以来设置的一些规则,请参阅 here .

当我尝试在设备的“设置”中手动设置 LG Q7 上 WiFi 网络的代理设置时,我遇到了同样的问题。由于某种原因,默认设置应用程序没有处理此问题。无论如何,我在 adb-join-wifi 的帮助下绕过了它。我相信它会向您展示如何以编程方式执行此操作。

这里的关键是您将使用 setHttpProxy 的应用程序设置为设备所有者(可以是暂时的),您可以使用 adb< 中的 dpm 工具来完成此操作 shell,如项目的 Github 页面上所述。

关于java - 如何在 Android 8 和 9 上添加设置了 HttpProxy 的 WifiConfiguration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57291739/

相关文章:

java - 如何在java中展平spark数据集中的包装数组

Android Databinding xml重复属性

ruby 。 Selenium 。代理人。代理不工作

nginx - 使用 Nginx 反向代理运行 Apache OpenMeetings?

angularjs - 用于ElasticSearch的Nginx反向代理仅允许_search端点

java - Android 编码最佳实践

java - 如何从xmi文件生成时序图

java - 使用抽象父类(super class)生成子类的随机实例

java - 在android studio 2.1中导入http包时出错

android - 从图像到 Android 谷歌地图的图 block 生成器