Обнаружение и обработка необходимости входа в систему для Wi-Fi

Я использую HttpClient4.1 в приложении для Android и пытаюсь сделать так, чтобы запросы API моего приложения перехватывались одним из тех, что «вам нужно войти в систему». или платить за Wi-Fi" экраны.

Я хочу открыть веб-просмотр, позволяющий пользователю войти в систему.

Я пытался перехватить редирект в httpClient, но безуспешно.

Вот что я сейчас пытаюсь сделать:

this.client = new DefaultHttpClient(connectionManager, params);

((DefaultHttpClient) this.client).setRedirectStrategy(new DefaultRedirectStrategy() {
    public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context)  {
        boolean isRedirect = Boolean.FALSE;
        try {
            isRedirect = super.isRedirected(request, response, context);
        } catch (ProtocolException e) {
            Log.e(TAG, "Failed to run isRedirected", e);
        }
        if (!isRedirect) {
            int responseCode = response.getStatusLine().getStatusCode();
            if (responseCode == 301 || responseCode == 302) {
                throw new WifiLoginNeeded();
                // The "real implementation" should return true here..
            }
        } else {
            throw new WifiLoginNeeded();
        }

        return isRedirect;
    }
});

И затем в моей деятельности:

try {
    response = httpClient.get(url);
} catch (WifiLoginNeeded e){
    showWifiLoginScreen();
}

где экран show wifi делает это:

Uri uri = Uri.parse("http://our-site.com/wifi-login");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

Мысль такова:

  • Мой API никогда не будет законно перенаправлять
  • Поэтому я настраиваю HttpClient так, чтобы при перенаправлении выбрасывалось мое специальное исключение RuntimeException
  • Перехватывайте это исключение в коде активности и открывайте веб-просмотр, чтобы направить их на экран входа в систему
  • После входа в систему Wi-Fi-login поздравляет их с заданием хорошо сделано и предлагает им вернуться в приложение

Дело в том, что я никогда не получаю это исключение WifiLoginNeeded. Каков предпочтительный способ сделать это с Android?

17
задан Alex Lockwood 23 March 2012 в 05:42
поделиться