【发布时间】:2023-03-25 04:07:02
【问题描述】:
目前有没有一种方法可以使用 Android sdk 通过 Android 应用程序设置 WebView 代理设置?
【问题讨论】:
-
你打算达到什么目的?您是否要在需要代理设置的应用程序中加载到 webview 以便 webview 可以加载您的 url?如果是这样我也有同样的问题。你是怎么解决的?
目前有没有一种方法可以使用 Android sdk 通过 Android 应用程序设置 WebView 代理设置?
【问题讨论】:
Log.d(LOG_TAG, "Setting proxy with >= 4.4 API.");
Context appContext = webView.getContext().getApplicationContext();
System.setProperty("http.proxyHost", host);
System.setProperty("http.proxyPort", port + "");
System.setProperty("https.proxyHost", host);
System.setProperty("https.proxyPort", port + "");
try {
Field loadedApkField = appContext.getClass().getField("mLoadedApk");
loadedApkField.setAccessible(true);
Object loadedApk = loadedApkField.get(appContext);
Class loadedApkCls = Class.forName("android.app.LoadedApk");
Field receiversField = loadedApkCls.getDeclaredField("mReceivers");
receiversField.setAccessible(true);
ArrayMap receivers = (ArrayMap) receiversField.get(loadedApk);
for (Object receiverMap : receivers.values()) {
for (Object rec : ((ArrayMap) receiverMap).keySet()) {
Class clazz = rec.getClass();
if (clazz.getName().contains("ProxyChangeListener")) {
Method onReceiveMethod = clazz.getDeclaredMethod("onReceive", Context.class, Intent.class);
Intent intent = new Intent(Proxy.PROXY_CHANGE_ACTION);
onReceiveMethod.invoke(rec, appContext, intent);
}
}
}
Log.d(LOG_TAG, "Setting proxy with >= 4.4 API successful!");
return true;
它适用于模拟器中的 Andriod 7.1
【讨论】: