MediaPlayer错误(1,-1004)

时间:2016-12-13 13:11:36

标签: android android-mediaplayer

我在堆栈溢出方面搜索过多,但我无法找到解决问题的方法。

我收到名为'MEDIA_ERROR_IO'代码-1004的媒体播放器错误。

我从服务器传输音频一切正常。歌曲准备然后以 onPrepared()方法开始。

现在问题出现了,当有来电和电话开始响铃时,我通过从我的BroadcastReceiver类调用 mediaPlayer.pause()来暂停歌曲。

当电话结束时,通过调用 mediaPlayer.start()

再次启动音频

音频开始但在2-3秒后它停止,出现错误,即MediaPlayer错误(1,-1004)。

现在该怎么办?

任何帮助都很明显。

谢谢。

1 个答案:

答案 0 :(得分:2)

  

音频开始但是在2-3秒后它停止并出现错误   MediaPlayer错误(1,-1004)。

首先,让我们了解错误(1,-1004)的含义。 -1004是IO错误的错误代码。以下是MediaPlayer.java源代码的参考。

/** File or network related operation errors. */
public static final int MEDIA_ERROR_IO = -1004;

如果出于某种原因,媒体播放器由于网络问题而无法连接到服务器,则会出现此类错误。可能是该实例的恶劣互联网连接或媒体播放器无法连接到服务器的某些网络相关原因。还有一些其他类似的错误代码,媒体播放器可以抛出超时或服务器死亡:

/** Some operation takes too long to complete, usually more than 3-5 seconds. */
    public static final int MEDIA_ERROR_TIMED_OUT = -110;
/** Media server died.*/
    public static final int MEDIA_ERROR_SERVER_DIED = 100;
  

现在该怎么办?

要在运行时处理媒体播放器生成的错误,您应该实现错误侦听器。您可以根据需要处理错误,例如重新启动播放器。

mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                switch(extra){
                    case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
                        // Do Something
                        // eg. reset the media player and restart
                        break;
                    case MediaPlayer.MEDIA_ERROR_IO:
                        // Do Something
                        // eg. Show dialog to user indicating bad connectivity
                        // or attempt to restart the player
                        break;
                    case MediaPlayer.MEDIA_ERROR_TIMED_OUT:
                        //Do Something
                        //eg. Show dialog that there was error in connecting to the server
                        // or attempt some retries
                        break;
                }
                //You must always return true if you want the error listener to work
                return true;
            }
        });