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

13

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

Host name and port for global http proxy. Uses ':' seperator for between host and port TODO - deprecate in favor of global_http_proxy_host, etc

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

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

Ваш Ответ

2   ответа
5

чтобы установить глобальный прокси, протестированный на ICS.

UPDATED CODE

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-адреса с помощью прокси-сервера.

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

Спасибо, Солнышко! Не могли бы вы дать мне знать, что oauthPage используется в вашем примере кода? Таким образом, это установит прокси для вашего собственного приложения или повлияет на все приложения в глобальном масштабе? Safecoder
Спасибо, Солнышко. С нетерпением ждем вашего обновления. Действительно ценю это! Safecoder
Так что, если я правильно понимаю, это только устанавливает прокси для одного oauthPage, который является объектом веб-просмотра. Это правильно? Могу ли я использовать его, чтобы установить прокси для всего моего http-трафика для моего приложения? То, что я ищу, - это глобальная настройка, то есть она будет влиять и на другие приложения, например на браузер. Пожалуйста, поделись своими мыслями. Спасибо! Safecoder
Это установит GLOBAL PROXY, если вы хотите использовать его в своем веб-просмотре, тогда вам нужно переопределить метод вwebviewclient которые аутентифицируют имя пользователя / пароль. Фактически приведенный выше код не завершен. Через некоторое время я опубликую полный код. Я сейчас занят в офисе.
Я попробовал простой тестовый пример только с одним объектом Webview. Затем использовал ваш код для настройки прокси. Поскольку вы используете my.proxy.com:1234 в качестве прокси-сервера, я ожидаю, что веб-просмотр не будет загружен, потому что такой прокси не существует. Но он загружает google.com без каких-либо проблем. У вас есть рабочий проект, который я могу попробовать? Я также попробовал код в вашей ссылке и назвал ProxySettings.setProxy (это, "my.proxy.com", 1234); но тоже без эффекта. Загрузка веб-страницы просто отлично. Safecoder
1

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

Спасибо, Тони. Просто добавили больше информации в оригинальный пост. Я ищу способ установить глобальный прокси в ICS. Я использовал скрытое действие, чтобы установить Settings.Secure.HTTP_PROXY для выпусков до ICS. Но это больше не работает. Какие-либо предложения? Safecoder

Похожие вопросы