如何在API 4.1和4.2中以編程方式爲Android WebView設置代理?對於較低的版本,下面的鏈接幫助 -設置適用於ICS和JellyBean的Android WebView代理
1
A
回答
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
這是設置爲代理服務器的WebView完整的方式。您應該爲每個SDK版本相應地設置代理。 避免不張貼SOOOO太多的代碼,請看看這個頁面GitHub的
希望這可以幫助你。
相關問題
- 1. mailto不適用於android jellybean
- 2. Android模擬器中的HTTP代理適用於瀏覽器,不適用於WebView
- 3. 適用於Android WebView的AppCache正確設置
- 4. webView與代理設置
- 5. android webview goBack和goForward不適用於WebViewClient
- 6. Android WebView - 適用於瀏覽器,但不適用於WebView
- 7. DHCP和代理設置Android
- 8. 設置/更改Android中的WebView用戶代理
- 9. Android設置webview內容適合寬度
- 10. Rails 3.0 .ics feed,適用於蘋果產品,但不適用於microsoft和android
- 11. Camera.Face支持JellyBean或Galaxy Nexus上的ICS
- 12. 設置適用於Android的IMediaPlaybackService
- 13. Android Webview不適用於Android 4.4
- 14. Android ICS Webview textarea打字慢
- 15. UTF-8上的WebView和ICS
- 16. Android代理設置
- 17. Android代理設置
- 18. 如何使JSONParser類適用於Android ICS和更新版本?
- 19. Android WebView適用於較大的圖片
- 20. 適用於Android的JWPlayer JavaScript API Webview
- 21. 適用於Android Webview的初始屏幕
- 22. 爲segue控制器設置webview代理?
- 23. getRealPathFromURI()不適用於基於ICS和Picasa的圖像
- 24. 設置代表(僅適用於協議)僅適用於prepareForSegue?
- 25. HTML5地理位置不適用於Android
- 26. Android的FTP代理設置
- 27. Android中的網絡設置類的位置jellybean
- 28. Xamarin Forms WebView代理
- 29. 如何使用適用於Android和iOS的Cordova設置圖標
- 30. SharePoint網站不適用於Android webview
什麼適用於舊設備? – jonney
@jonney - 對於舊版本,請檢查這篇文章 - http://stackoverflow.com/questions/4488338/webview-android-proxy。問題中提到了這一點。 :-) – MediumOne