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