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 システムがそれを殺していると確信しています。ここからどこへ行けばいいのかわからない。
誰が何が間違っているのか考えていますか?