1

さまざまな異なる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);
        }
    }
}
4

0 に答える 0