0

URL から 1.5 ~ 4 時間のオーディオ ファイルをストリーミングしようとしています。mp3 ファイルへのリンクがブラウザーでクリックされたときにサービスを実行し、次のコードを使用して再生します。

        String sData = intent.getDataString();

        if (sData != null && sData.startsWith("http:") && sData.endsWith(".mp3"))
        {
            if (p_oPlayer == null)
            {
                CreateMediaPlayer(); // sets p_oPlayer = new MediaPlayer() and creates callbacks for OnPreparedListener, OnErrorListener, OnInfoListener & OnCompletionListener
            }
            else
            {
                if (p_oPlayer.isPlaying())
                    p_oPlayer.stop();
                p_oPlayer.reset();
            }

            // The next 5 lines are just to make a title out of a filename
            String sFile = "";
            Pattern p = Pattern.compile("([^/]*)\\.mp3");
            Matcher m = p.matcher(sData);
            if (m.find())
                sFile = m.group(1).replace("%20", " ");

            p_oPlayer.setDataSource(sData);
            p_oPlayer.prepareAsync(); // OnPreparedListener callback just calls start() on the MediaPlayer

            Intent i = new Intent(this, Main.class);
            i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
            PendingIntent pIntent = PendingIntent.getActivity(this, 0, i, 0);

            Notification notice = new Notification(R.drawable.icon2, "WFKO stream is playing", System.currentTimeMillis());

            notice.setLatestEventInfo(this, "WFKO Radio", sFile, pIntent);
            notice.flags |= Notification.FLAG_NO_CLEAR;
            startForeground(myID, notice);
        }

したがって、私が Android システムに対してフォアグラウンド サービスを使用していることは、絶対に必要な場合を除き、サービスを破棄しないことを知っていることがわかります。問題は、ストリームが再生中にランダムに 10 ~ 20 分カットされることです。同じストリームを複数回再生すると、毎回異なる場所でカットされるため、データの特定のチャンクにヒットしてクラッシュするだけではありません。OnCompletionListener、OnErrorListener、および OnInfoListener はすべて何もしません。それらを作成し、ブレークポイントを配置して、何が起こっているかを確認しました。ストリームが途切れると、OnCompletionListener に直行します。info または error メソッドを呼び出すことはありません。

フォアグラウンド サービスの通知は、ストリームが停止しても通知バーに表示されるので、Android システムがそれを殺していると確信しています。ここからどこへ行けばいいのかわからない。

誰が何が間違っているのか考えていますか?

4

1 に答える 1

0

私の電話がジンジャーブレッド(2.3.4)のアップデートを受け取った後、これはもはや問題ではありません。アップデートにMediaPlayerの修正があったことはわかっているので、問題は修正されたMediaPlayerのバグであると想定する必要があります。

于 2011-12-19T16:59:06.957 に答える