Android开发人员文档说明以下Settings.Secure.HTTP_PROXY
:
全局http代理的主机名和端口。在主机和端口TODO之间使用':'分隔符 - 弃用以支持global_http_proxy_host等
但是没有关于global_http_proxy_host
的任何信息。现在,在尝试阅读null
时,我始终会Settings.Secure.HTTP_PROXY
。
Settings.Secure.HTTP_PROXY
在ICS之前的所有版本中都正常运行。
答案 0 :(得分:5)
您可以使用Java Reflection设置在ICS上测试的全局代理。
更新代码
Activity activity = this;
private void setProxtAndPortOnICS(String porxyServer2, int port2)
{
try
{
Class jwcjb = Class.forName("android.webkit.JWebCoreJavaBridge");
Class params[] = new Class[1];
params[0] = Class.forName("android.net.ProxyProperties");
Method updateProxyInstance = jwcjb.getDeclaredMethod("updateProxy", params);
Class wv = Class.forName("android.webkit.WebView");
Field mWebViewCoreField = wv.getDeclaredField("mWebViewCore");
Object mWebViewCoreFieldIntance = getFieldValueSafely(mWebViewCoreField, oauthPage);
Class wvc = Class.forName("android.webkit.WebViewCore");
Field mBrowserFrameField = wvc.getDeclaredField("mBrowserFrame");
Object mBrowserFrame = getFieldValueSafely(mBrowserFrameField, mWebViewCoreFieldIntance);
Class bf = Class.forName("android.webkit.BrowserFrame");
Field sJavaBridgeField = bf.getDeclaredField("sJavaBridge");
Object sJavaBridge = getFieldValueSafely(sJavaBridgeField, mBrowserFrame);
Class ppclass = Class.forName("android.net.ProxyProperties");
Class pparams[] = new Class[3];
pparams[0] = String.class;
pparams[1] = int.class;
pparams[2] = String.class;
Constructor ppcont = ppclass.getConstructor(pparams);
updateProxyInstance.invoke(sJavaBridge, ppcont.newInstance("my.proxy.com", 1234, null));
}
catch (Exception ex)
{
}
}
private Object getFieldValueSafely(Field field, Object classInstance) throws IllegalArgumentException, IllegalAccessException {
boolean oldAccessibleValue = field.isAccessible();
field.setAccessible(true);
Object result = field.get(classInstance);
field.setAccessible(oldAccessibleValue);
return result;
}
现在您可以使用代理服务器过滤掉网址。
或者看看this博客这是中文的,但你可以阅读它很容易理解的代码。
答案 1 :(得分:1)
我只是按照文档说的那样,但它告诉我Settings.Secure.HTTP_PROXY
目前尚未弃用。文档中的(草率)注释只是开发人员的注意事项,这是Android团队可能将来考虑做的事情。