さまざまな異なるURLからストリーミングするラジオアプリを作成しています。
ここで、URLからストリームをフェッチするときに、どの曲が再生されているかというコンテンツ、つまりメタデータも必要です。
このために、TimerTaskで別のスレッドを実行して、40秒ごとのようにHTTP接続を作成します。
OS 5以降でシミュレーターを使用している間は問題ありませんが、同じスレッドを2〜3回実行すると、メタデータは一貫して受信されますが、その後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);
}
}
}