相关疑难解决方法(0)

WebView android代理

我知道如何手动设置代理并在我的WebView中使用它.

设置 - >无线网络 - >移动网络 - >接入点名称 - > telkila.现在输入代理服务器地址和端口(将为80).WebView.enablePlatformNotifications();

但我可以从代码中设置代理设置吗?所以我的用户不必手动设置?

谢谢

proxy android android-webview

36
推荐指数
4
解决办法
4万
查看次数

使用Webview和代理进行身份验证

我需要在一个国家/地区中无法使用的WebView中加载一些url,因此我尝试将代理与WebView一起使用。我在SO(/sf/answers/1291736911/)上找到了一个解决方案,它可以与无需身份验证的代理一起使用。但是我需要使用用户名和密码设置代理。

有些方法没有帮助:

1)使用标头加载网址

   class ProxyAuthWebViewClient extends WebViewClient {
    String proxyUserName;
    String proxyPassword;
    public ProxyAuthWebViewClient(String proxyUserName, String proxyPassword){
        this.proxyUserName = proxyUserName;
        this.proxyPassword = proxyPassword;
    }
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        loadUrl(view, url, proxyUserName, proxyPassword);
        return true ;
    }
}

public void loadUrl(WebView view, String url, String proxyUserName, String proxyPassword){
    UsernamePasswordCredentials creds= new UsernamePasswordCredentials(proxyUserName, proxyPassword);
    Header credHeader = BasicScheme.authenticate(creds, "UTF-8", true);
    Map<String, String> header = new HashMap<String, String>();
    header.put(credHeader.getName(), credHeader.getValue());
    view.loadUrl(url, header);
}
Run Code Online (Sandbox Code Playgroud)

2)在setProxy方法中添加密码和用户(以下完整代码):

        Authenticator.setDefault(
            new Authenticator() …
Run Code Online (Sandbox Code Playgroud)

proxy android webview

4
推荐指数
1
解决办法
628
查看次数

Android WebView在Android-L上以编程方式设置代理

所以这个解决方案适用于Android 4.4.4,然而,代码停止在Android-L开发人员预览上工作,有没有人有一些Android-L的工作代码?或者我自己如何获取代码的任何提示?

这是我用于KitKat的当前方法(并且有效)

@TargetApi(Build.VERSION_CODES.KITKAT)
private static boolean setKitKatWebViewProxy(WebView webView, String host, int port) {
    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 {
        Class applictionCls = Class.forName(FinalVariables.APPLICATION_CANONICAL_NAME);
        Field loadedApkField = applictionCls.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")) …
Run Code Online (Sandbox Code Playgroud)

android-webview android-5.0-lollipop

2
推荐指数
1
解决办法
4181
查看次数