Android的代理混淆了文档资源

lec*_*ain 8 proxy android http android-wifi

在我看来,Android上的代理主题有很多令人困惑的资源.

首先,看来Proxy类的所有方法都被声明为已弃用,建议:

"使用标准的java vm代理值来查找主机,端口和排除列表.此调用将忽略排除列表."

可以通过以下方式访问官方java vm代理值:

System.getProperty("http.proxyHost")
System.getProperty("http.proxyPort")
System.getProperty("http.nonProxyHosts")
Run Code Online (Sandbox Code Playgroud)

这似乎可以通过ProxySelector类的文档得到证实.

但是尝试使用真实设备或模拟器,这些值似乎总是空洞的.在查看隐藏的ProxySelector活动的Android源代码之后,似乎代理以下列方式保存到系统的安全设置中:

Settings.Secure.putString(res, Settings.Secure.HTTP_PROXY, hostname);
Run Code Online (Sandbox Code Playgroud)

并且只有OS提供商签署的应用程序才能写入安全设置.开发人员只能以读取模式访问这些设置,方法如下:

Settings.Secure.getString(getApplicationContext().getContentResolver(),Settings.Secure.HTTP_PROXY);
Run Code Online (Sandbox Code Playgroud)

有人可以澄清这是否正确阅读如何将代理设置访问到Android?(至少它似乎工作).如果这是正确的解释,为什么文档充满了错误?

Spa*_*rky 2

要获取代理值,按照您所做的那样访问系统属性应该可行;没有必要访问安全设置。如果您无法使用系统属性读取通过普通设备 UI 进行的代理设置,则存在问题。代理根据网络类型而定,因此 APN 和 WiFi 将具有单独的代理设置。