在ICS中不推荐使用Settings.Secure.HTTP_PROXY,但没有关于替换的信息

时间:2012-05-16 02:49:05

标签: android proxy settings android-4.0-ice-cream-sandwich

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之前的所有版本中都正常运行。

2 个答案:

答案 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团队可能将来考虑做的事情。