Możesz użyć Java Reflection, aby ustawić globalny proxy testowany na ICS.
zaktualizowany kod
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;
}
teraz można odfiltrować adresy URL za pomocą serwera proxy.
LUB spójrz na blog this w języku chińskim, ale możesz przeczytać kod, który jest dość łatwy do zrozumienia.
Dzięki, Sunny! Czy mógłbyś dać mi znać, co jest oauthPage używane w twoim przykładzie kodu? Czy to ustawi serwer proxy dla twojej własnej aplikacji, czy będzie to miało wpływ na wszystkie aplikacje na całym świecie? – Safecoder
Więc jeśli rozumiem to poprawnie, to ustawia tylko proxy dla pojedynczego oauthPage, który jest obiektem przeglądania. Czy to jest poprawne? Czy mogę go użyć do ustawienia proxy dla całego mojego ruchu http dla mojej aplikacji? To, czego szukam, to ustawienie globalne, co oznacza, że wpłynie również na inne aplikacje, na przykład przeglądarkę. Proszę, podziel się swoimi myślami. Dzięki! – Safecoder
Próbowałem prosty przypadek testowy z tylko jednym obiektem Webview. Następnie użyj swojego kodu do ustawienia proxy. Ponieważ używasz my.proxy.com:1234 jako serwera proxy, więc oczekiwałbym, że przeglądarka nie załaduje się, ponieważ taki serwer proxy nie istnieje. Ale ładuje google.com bez problemu. Czy masz działający projekt, który mogę wypróbować? Próbowałem również kod w twoim linku i nazwał ProxySettings.setProxy (to, "my.proxy.com", 1234); ale także bez efektu. Strona ładowania strony internetowej jest w porządku. – Safecoder