我正在创建一个 Radio 应用程序,它将从各种不同的 URL 流式传输。
现在,在从 url 获取流的同时,我们还想要在即元数据上播放的歌曲的内容。
现在为此,我在 TimerTask 中运行另一个线程,该线程将创建 HTTP 连接,例如每 40 秒后。
在使用 OS 5 及更高版本的模拟器时没有问题,但是当我运行相同的线程进行两到三次迭代时,元数据会始终如一地收到,但之后我们得到 TCP 超时异常,这会停止整个系统和设备甚至丢失互联网连接。
您能否建议任何可以解决问题的替代方案。
我还分享了将从流 URL 获取元数据的代码。
class metaData extends Thread {
public void run() {
try {
boolean metaDataCheckBit = false;
StreamConnection streamConnection = (StreamConnection)Connector.open(url);
HttpConnection httpConnection = (HttpConnection)streamConnection;
httpConnection.setRequestProperty("Icy-metadata", "1");
int httpStatus = httpConnection.getResponseCode();
if (httpStatus==HttpConnection.HTTP_OK) {
String mint = httpConnection.getHeaderField("icy-metaint");
InputStream inputStream = streamConnection.openInputStream();
int length = Integer.parseInt(mint);
int b = 0;
int count = 0;
while(count++ < length){
b = inputStream.read();
}
int metalength = ((int)b)*16;
if (metalength <= 0) return;
byte buf[] = new byte[metalength];
inputStream.read(buf,0,buf.length);
final String metaData = new String(buf);
final String streamTille =
metaData.substring(14, metaData.indexOf("StreamUrl")-2);
System.out.println("Stream Title--------"+streamTille);
UiApplication.getUiApplication().invokeAndWait(new Runnable(){
public void run() {
try {
titleRf.setText(streamTille);
} catch (Exception e) {
System.out.println("Exception: " + e.toString());
}
}
});
}
} catch (Exception e){
System.out.println("Exception in meta data...."+e);
}
}
}