регистрация и завершение HTTP-запроса из встроенного Android WebView - PullRequest
6 голосов
/ 14 февраля 2012

Я ищу способ регистрировать запросы и время начала / окончания, сделанные встроенным веб-просмотром. Я не могу найти способ сделать это, кроме как рутировать телефон и запускать tcpdump. Это работает для меня, но мне нужно запустить это в поле, так что это не совсем жизнеспособно. Есть много способов зарегистрировать URL и время начала, но я не вижу конца (или бонуса, полных метаданных ответа).

shouldLoadResource мог бы работать, если бы я мог обернуть текущий запрос, но мне пришлось бы самому извлекать его с поддержкой HTTP, чтобы вернуть его в массовом порядке, потому что не хватает API для полной пересылки на внутренний запрос. (Я не хочу этого делать по ряду причин, в том числе из-за того, что веб-просмотр на устройствах не использует тот же сетевой стек, что и классы HTTP, и потому, что он изменит время субресурсов.)

Я пытался найти способы включить флаги отладки chromium_net, чтобы сделать это, но я не могу понять, как это сделать в контексте свойств WebView или системы.

Я бы предпочел не отправлять свой собственный webcore для этого, но если нужно, нужно ...

Ответы [ 2 ]

2 голосов
/ 22 июня 2012

метод переопределения shouldInterceptRequest()

@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    Log.d(LOG_TAG, "shouldInterceptRequest: " + url);

    return super.shouldInterceptRequest(view, url);
}
0 голосов
/ 15 февраля 2012

В этом случае вы также можете добавить WebViewClient (см. http://developer.android.com/reference/android/webkit/WebViewClient.html)., который будет выглядеть примерно так:

WebView webView.setWebViewClient(new MyWebViewClient());

.
.
.

public class MyWebViewClient extends WebViewClient 
{
  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) 
  {
    // Note time

    // Return false to say we want the WebView to handle the url.
    return false;
    }

  @Override 
  public void onPageFinished (WebView view, String url)
  {
    super.onPageFinished(view, url);

    // Note time
  }
}

. Обратите внимание, что shouldOverrideUrlLoading и onPageFinished должны вызываться только для основного кадра -они не будут вызываться для фреймов или фреймов. Но это должно дать вам то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...