È possibile utilizzare Java Reflection per impostare il proxy globale testato su ICS.
codice aggiornato
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;
}
Ora è possibile filtrare gli URL che utilizzano server proxy.
O guarda il blog this questo è in cinese ma puoi leggere il codice è abbastanza facile da capire.
Grazie, Sunny! Potresti per favore farmi sapere che cosa è oauthPage utilizzato nell'esempio di codice? Quindi questo imposterà il proxy per la tua app o avrà un impatto su tutte le app a livello globale? – Safecoder
Quindi, se ho capito bene, questo imposta solo proxy per la singola oauthPage, che è un oggetto webview. È corretto? Posso usarlo per impostare il proxy per tutto il mio traffico http per la mia app? Quello che sto cercando è un ambiente globale, il che significa che influenzerebbe anche altre app, ad esempio il browser. Per favore fammi sapere cosa pensi. Grazie! – Safecoder
Ho provato un semplice test case con un solo oggetto Webview. Quindi usato il tuo codice per impostare il proxy. Perché tu usi my.proxy.com:1234 come proxy, quindi mi aspetto che la webview non si carichi perché tale proxy non esiste. Ma carica google.com senza alcun problema. Hai un progetto di lavoro che posso provare? Ho anche provato il codice nel tuo collegamento e ho chiamato ProxySettings.setProxy (questo, "mio.proxy.com", 1234); ma anche nessun effetto. Pagina di caricamento di Webview bene. – Safecoder