Подтвердить что ты не робот

Settings.Secure.HTTP_PROXY устарел в ICS, но нет информации о замене

В документах разработчиков Android говорится следующее о Settings.Secure.HTTP_PROXY:

Имя хоста и порт для глобального HTTP-прокси. Uses ':' seperator между хостом и портом TODO - обесценивается в пользу global_http_proxy_host и т.д.

Но нет информации о global_http_proxy_host. Теперь я всегда получаю null при чтении Settings.Secure.HTTP_PROXY.

Settings.Secure.HTTP_PROXY работал правильно во всех выпусках до ICS.

4b9b3361

Ответ 1

Вы можете использовать Java Reflection для установки глобального прокси-сервера, протестированного на ICS.

ОБНОВЛЕННЫЙ КОД

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;      
}

СЕЙЧАС вы можете отфильтровать URL-адреса с помощью прокси-сервера.

ИЛИ посмотрите этот блог, это на китайском, но вы можете прочитать код, который довольно легко понять.

Ответ 2

Я просто понимаю, что говорит документация, но он мне читает, что Settings.Secure.HTTP_PROXY в настоящее время не рекомендуется. (Небрежная) заметка в документации была только примечанием разработчика, что это то, что команда Android может рассмотреть в будущем.