Bạn có thể sử dụng Java Reflection để đặt proxy toàn cầu được thử nghiệm trên ICS.
CẬP NHẬT MÃ
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;
}
bây giờ bạn có thể lọc ra các url sử dụng máy chủ proxy.
HOẶC xem this blog bằng tiếng Trung Quốc nhưng bạn có thể đọc mã dễ hiểu.
Cảm ơn, Sunny! Bạn có thể vui lòng cho tôi biết oauthPage được sử dụng trong ví dụ mã của bạn là gì không? Vì vậy, điều này sẽ thiết lập proxy cho ứng dụng của riêng bạn hoặc nó sẽ tác động đến tất cả các ứng dụng trên toàn cầu? – Safecoder
Vì vậy, nếu tôi hiểu nó một cách chính xác, điều này chỉ đặt proxy cho oauthPage duy nhất, đó là một đối tượng webview. Nó có đúng không? Tôi có thể sử dụng nó để đặt proxy cho tất cả lưu lượng truy cập http của mình cho ứng dụng của mình không? Những gì tôi đang tìm kiếm là một thiết lập toàn cầu, có nghĩa là nó sẽ ảnh hưởng đến các ứng dụng khác, ví dụ như trình duyệt. Xin vui lòng cho tôi biết suy nghĩ của bạn. Cảm ơn! – Safecoder
Tôi đã thử một trường hợp thử nghiệm đơn giản chỉ với một đối tượng Webview. Sau đó, sử dụng mã của bạn để đặt proxy. Bởi vì bạn sử dụng my.proxy.com:1234 làm proxy nên tôi hy vọng webview sẽ không tải được vì proxy đó không tồn tại. Nhưng nó tải google.com mà không có bất kỳ vấn đề gì. Bạn có một dự án làm việc mà tôi có thể thử không? Tôi cũng đã thử mã trong liên kết của bạn và được gọi là ProxySettings.setProxy (điều này, "my.proxy.com", 1234); nhưng cũng không có hiệu lực. Trang tải trang web xem tốt. – Safecoder