安卓代理混乱的文档资源

8
我认为在Android代理主题方面存在许多混乱的资源。首先,似乎所有Proxy类的方法都被宣布为过时的,并建议使用标准的Java VM代理值来查找主机、端口和排除列表。这个调用会忽略排除列表。可以通过以下方式访问官方的Java VM代理值
System.getProperty("http.proxyHost")
System.getProperty("http.proxyPort")
System.getProperty("http.nonProxyHosts")

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

但是在真实设备或仿真器上尝试时,这些值总是为空。在查看隐藏的ProxySelector活动的Android源代码后,似乎代理以以下方式保存到系统的安全设置中:

Settings.Secure.putString(res, Settings.Secure.HTTP_PROXY, hostname);

只有操作系统提供商签名的应用程序才能写入安全设置。开发人员只能以读模式访问这些设置,方法如下:

Settings.Secure.getString(getApplicationContext().getContentResolver(),Settings.Secure.HTTP_PROXY);

有人能够澄清一下如何访问Android代理设置吗?(至少看起来是有效的)。如果这是正确的解释,那么为什么文档充满了错误呢?


你好,LeChuck Captain。我使用安卓2.3.3的三星S2手机,但是你提供的方法总是返回null,为什么呢? - Chris
很不幸,我没有三星S2来尝试你所说的,但在我看来,这可能取决于三星进行的ROM定制或特定运营商。 - lechuckcaptain
@LeChuckCaptain 你好,老兄,能给我你的邮箱吗?我有关于你的代理库的问题。先谢谢了。 - Simon Dorociak
你可以在这里找到我:https://github.com/lechuckcaptain - lechuckcaptain
2个回答

2

要获取代理值,像您所做的那样访问系统属性应该是有效的;不需要访问安全设置。如果您无法使用系统属性读取通过正常设备UI进行的代理设置,则存在问题。代理是按网络类型分别设置的,因此APN和WiFi将具有单独的代理设置。


1
对于Android 1.X和2.X版本,实际上似乎只有最后一个示例可以工作,从安全设置数据库获取代理设置。自3.1版本以来,用户可以为每个Wi-Fi接入点输入代理设置,但开发人员无法访问这些设置(至少没有记录)。我正在尝试构建此库以使其简单化,但我的问题是:我是否做得对或者我在文档中漏掉了什么? - lechuckcaptain
1
船长,我认为您从那些System.getProperty()方法中获得的只是该方案的默认代理。如果您没有收到任何返回值,可能是因为尚未定义代理。要获取特定URL的代理,请执行以下操作:proxyList = myProxySelector.select(httpUri); - Sparky
哇!看起来好像可以工作了,至少在Android 3.X或更高版本上!这是一个很有启发的评论!再次感谢你,Sparky!我会尽量写一些额外的文档和示例,因为我觉得很多其他开发者并不清楚如何获取和使用这些设置! - lechuckcaptain
我确认这似乎只适用于Android 3.x或更高版本。我创建了一个新的问题,针对Android 2.x版本:https://dev59.com/M2ox5IYBdhLWcg3wFAfW - lechuckcaptain

2

我不知道访问代理设置的方式是否正确,但这是你应该访问系统“安全设置”的正确且唯一的方式。

也许这个库也很有趣,看起来可以使事情变得更容易,特别是如果有Wifi代理(Android支持类似的东西吗?)。至少它看起来是对不同Android版本的很好的抽象。


太好了!事实上这是我的项目。我希望能从某个比我更熟悉该问题和平台的人那里得到答案。我希望自己不必成为该问题的专家! - lechuckcaptain
1
哦,看起来你赢了,需要再做一些研究;) 很抱歉,我就不知道了 :/ - Luminger

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