为了账号安全,请及时绑定邮箱和手机立即绑定

WebView Android代理

WebView Android代理

交互式爱情 2019-07-22 19:58:16
WebView Android代理我知道如何手动设置代理,并在我的WebView中使用它。设置->无线网络->移动网络->接入点名称->telkila。现在输入代理服务器地址和端口(80)。WebView.enablePlatformNotiations();但是我可以从代码中设置代理设置吗?所以我的用户不需要手动设置?谢谢
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

我已经做了很多测试,我可以说以前的响应使用了基于android.net.http.RequestQueue从Android1.6到3.1,运行良好。

但是在API上有一个代码重构,为了使它在Android3.2&4.x上工作,这里有一个解决方案:

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){    }

享受


查看完整回答
反对 回复 2019-07-22
  • 3 回答
  • 0 关注
  • 1010 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信