以编程方式设置Wi-Fi代理凭据

14

应用将使用系统签名进行签名,因此最终可能会授予一些受保护的权限(如android.permission.WRITE_SECURE_SETTINGS)。

我的问题是如何在特定的WiFi网络上全局设置代理凭据,知道该应用程序将使用系统签名进行签名?

我找不到关于如何实现这一点的任何信息。根据标准Java应用程序中所能执行的操作,以下代码可能有效:

        System.setProperty("http.proxyUser", usr);
        System.setProperty("http.proxyPassword", pwd);

但是,这是在Android上设置代理凭据的方法吗?它会全局设置代理凭据(即对所有使用默认http支持的应用程序)吗?(我认为,即使这个调用起作用,它也不会影响进程边界之外的任何事情)

我还检查了android.provider.Settings.java的代码,在那里我发现了一些有关全局代理的属性:global_http_proxy_hostglobal_http_proxy_port,但没有关于代理身份验证的内容。


我对Android一无所知,但我在一个纯Java应用程序中遇到了类似的问题:在http代理上验证用户。我的解决方法是子类化标准的java.net.Authenticator,提示用户输入登录名/密码。从我所见,Android提供了类似的情况:https://developer.android.com/reference/java/net/Authenticator.html - amanin
您是想要更改您的应用程序还是手机上的设置? - Tarun Lalwani
目标是全局更改手机设置。或者至少更改使用Android-SDK提供的默认http支持的所有应用程序。目标是获得与手动通过“设置> WiFi>选择网络>高级>代理”输入代理用户名/密码时相同的结果。 - ben75
手动方法对应的API是WifiConfiguration.setHttpProxy()。不幸的是,它只在26及以上版本可用,而且似乎不支持身份验证。 - bwt
全局代理可能不是一个好主意;通常代理配置取决于网络(例如,从内部网络使用代理,在GSM上不使用代理)。 - rds
3个回答

6

3

在Android中没有设置全局代理凭据的方法。整个AOSP中根本没有可以保存它的结构。

不幸的是,我没有找到任何关于这个问题的解释。相关的Issue Tracker项目不是公开的,在源代码中的注释很少。开发者博客上也没有关于这个问题的任何信息。Karim Yaghmour的《嵌入式Android》也没有解决这个问题。

P.S. 这个答案完全基于代码分析。


0

如果您拥有签名权限,可以在/data/misc/wifi目录中修改ipconfig.txt文件(实际上,目录取决于设备型号)。请参考WifiConfigStore中的readIpAndProxyConfigurations方法。我知道这个方法相当粗糙,但它在我的公司手机上运行良好。请注意,某些手机型号可能需要在更改ipconfig.txt后禁用wifi并重新启动wpa_supplicant进程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接