我决定开始使用Android 4.4测试我的应用,并注意到Android HTTP连接API比以前更加严格?我从来没有遇到过这个问题,我认为这是某种类型的错误。
我正在连接包含特定icy标头响应的SHOUTcast广播。
有没有人见过这个问题?我怎么能绕过它?
此测试使用的网址
http://50.117.121.162:80
异常的Logcat:
11-01 23:47:57.299:E / ConnectHelper(3081):java.net.ProtocolException: 意外状态行:ICY 200 OK 11-01 23:47:57.299: E / ConnectHelper(3081):at com.android.okhttp.internal.http.RawHeaders.setStatusLine(RawHeaders.java:108) 11-01 23:47:57.299:E / ConnectHelper(3081):at com.android.okhttp.internal.http.RawHeaders.fromBytes(RawHeaders.java:308) 11-01 23:47:57.299:E / ConnectHelper(3081):at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:135) 11-01 23:47:57.299:E / ConnectHelper(3081):at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:644) 11-01 23:47:57.299:E / ConnectHelper(3081):at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:347) 11-01 23:47:57.299:E / ConnectHelper(3081):at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296) 11-01 23:47:57.299:E / ConnectHelper(3081):at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:503) 11-01 23:47:57.299:E / ConnectHelper(3081):at com.vblast.xiialive.media.streamers.ConnectHelper.connectWorker(ConnectHelper.java:176) 11-01 23:47:57.299:E / ConnectHelper(3081):at com.vblast.xiialive.media.streamers.ConnectHelper.run(ConnectHelper.java:143) 11-01 23:47:57.299:E / ConnectHelper(3081):at java.lang.Thread.run(Thread.java:841)
答案 0 :(得分:6)
在Android 4.4上,事情确实发生了变化,不再支持无标准的SHOUTcast ICY标头响应。就像Apache HTTPClient库一样。
我可以在这篇文章中找到我要做的事情:
How to parse a none standard HTTP response?
答案 1 :(得分:0)
Jona回答是对的,但是如果您使用AACPlayer(https://code.google.com/p/aacplayer-android/)来播放SHOUTcast,这是一个更简单的解决方案:https://code.google.com/p/aacdecoder-android/wiki/HandlingShoutcastStreams
另外,我需要将我的网址从“http://example.org”更改为“icy://example.org”
答案 2 :(得分:0)
我已经实施了基于Apache HttpClient的解决方案,您可以将其找到a gist here。
以下是如何使用它:
IcyGetRequest request = new IcyGetRequest(urlStr);
HttpResponse response = request.get();
int responseCode = response.getStatusLine().getStatusCode();