title: Android WebView set proxy programmatically on Android-L
body: <p>So <a href="https://stackoverflow.com/questions/19979578/android-webview-set-proxy-programatically-kitkat">this solution</a> works up up to Android 4.4.4, however, the code ceases to work on Android-L developer preview, does anyone have some working code for Android-L? Or any tips on how I might get to the code myself?</p>
  
  <p>This is the current method I use for KitKat (and works)</p>
  
  <pre><code>@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")) {
                      Method onReceiveMethod = clazz.getDeclaredMethod("onReceive", Context.class, Intent.class);
                      Intent intent = new Intent(Proxy.PROXY_CHANGE_ACTION);
  
                      /*********** optional, may be need in future *************/
                      final String CLASS_NAME = "android.net.ProxyProperties";
                      Class cls = Class.forName(CLASS_NAME);
                      Constructor constructor = cls.getConstructor(String.class, Integer.TYPE, String.class);
                      constructor.setAccessible(true);
                      Object proxyProperties = constructor.newInstance(host, port, null);
                      intent.putExtra("proxy", (Parcelable) proxyProperties);
                      /*********** optional, may be need in future *************/
  
                      onReceiveMethod.invoke(rec, appContext, intent);
                  }
              }
          }
          return true;
      } catch (ClassNotFoundException e) {
          StringWriter sw = new StringWriter();
          e.printStackTrace(new PrintWriter(sw));
          String exceptionAsString = sw.toString();
          Log.v(LOG_TAG, e.getMessage());
          Log.v(LOG_TAG, exceptionAsString);
      } catch (NoSuchFieldException e) {
          StringWriter sw = new StringWriter();
          e.printStackTrace(new PrintWriter(sw));
          String exceptionAsString = sw.toString();
          Log.v(LOG_TAG, e.getMessage());
          Log.v(LOG_TAG, exceptionAsString);
      } catch (IllegalAccessException e) {
          StringWriter sw = new StringWriter();
          e.printStackTrace(new PrintWriter(sw));
          String exceptionAsString = sw.toString();
          Log.v(LOG_TAG, e.getMessage());
          Log.v(LOG_TAG, exceptionAsString);
      } catch (IllegalArgumentException e) {
          StringWriter sw = new StringWriter();
          e.printStackTrace(new PrintWriter(sw));
          String exceptionAsString = sw.toString();
          Log.v(LOG_TAG, e.getMessage());
          Log.v(LOG_TAG, exceptionAsString);
      } catch (NoSuchMethodException e) {
          StringWriter sw = new StringWriter();
          e.printStackTrace(new PrintWriter(sw));
          String exceptionAsString = sw.toString();
          Log.v(LOG_TAG, e.getMessage());
          Log.v(LOG_TAG, exceptionAsString);
      } catch (InvocationTargetException e) {
          StringWriter sw = new StringWriter();
          e.printStackTrace(new PrintWriter(sw));
          String exceptionAsString = sw.toString();
          Log.v(LOG_TAG, e.getMessage());
          Log.v(LOG_TAG, exceptionAsString);
      } catch (InstantiationException e) {
          StringWriter sw = new StringWriter();
          e.printStackTrace(new PrintWriter(sw));
          String exceptionAsString = sw.toString();
          Log.v(LOG_TAG, e.getMessage());
          Log.v(LOG_TAG, exceptionAsString);
      }
      return false;
  }
  </code></pre>
  
  <p>Thank you!</p>