MediaPlayer流随机删除

时间:2011-08-01 04:43:48

标签: android android-mediaplayer

我正在尝试从网址流式传输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。它从不调用信息或错误方法。

当流停止时,前台服务的通知会保留在通知栏中,所以我很确定Android系统正在谋杀它。我不知道从哪里开始。

有没有人有任何想法可能出错?

1 个答案:

答案 0 :(得分:0)

我的手机收到Gingerbread(2.3.4)更新后,这不再是一个问题。我知道更新中有MediaPlayer修复程序,因此我将不得不假设该问题是MediaPlayer中修复的错误。