2013-01-09 24 views

回答

0

此代码的工作 -

/** 
* Set Proxy for Android 4.1 and above. 
*/ 
public static boolean setProxyICSPlus(WebView webview, String host, int port, String exclusionList) { 

    Log.d("", "Setting proxy with >= 4.1 API."); 

    try { 

    Class wvcClass = Class.forName("android.webkit.WebViewClassic"); 
    Class wvParams[] = new Class[1]; 
    wvParams[0] = Class.forName("android.webkit.WebView"); 
    Method fromWebView = wvcClass.getDeclaredMethod("fromWebView", wvParams);   
    Object webViewClassic = fromWebView.invoke(null, webview);  

    Class wv = Class.forName("android.webkit.WebViewClassic"); 
    Field mWebViewCoreField = wv.getDeclaredField("mWebViewCore"); 
    Object mWebViewCoreFieldIntance = getFieldValueSafely(mWebViewCoreField, webViewClassic); 

    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); 

    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); 

    updateProxyInstance.invoke(sJavaBridge, ppcont.newInstance(host, port, exclusionList)); 

    } catch (Exception ex) { 
    Log.e("","Setting proxy with >= 4.1 API failed with error: " + ex.getMessage()); 
    return false; 
    } 

    Log.d("", "Setting proxy with >= 4.1 API successful!"); 
    return true; 
} 
+0

什么适用于旧设备? – jonney

+0

@jonney - 对于旧版本,请检查这篇文章 - http://stackoverflow.com/questions/4488338/webview-android-proxy。问题中提到了这一点。 :-) – MediumOne

相关问题