Я использую HttpClient
4.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 при перенаправлении
- Поймайте это исключение из кода операции и позовите Webview, чтобы получить их на экране входа в систему.
- После входа в систему wifi-login поздравляет их с хорошо выполненной работой и приглашает их обратно в приложение.
Дело в том, что я никогда не получаю исключение WifiLoginNeeded. Каков предпочтительный способ выполнить это с Android?