媒体播放器错误 (1, -1004)

Vis*_*ani 3 android android-mediaplayer

我在这里搜索了太多关于堆栈溢出的信息,但找不到任何解决我问题的方法。

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

我正在从服务器流式传输音频,一切正常。歌曲准备好,然后在onPrepared()方法中开始。

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

当电话通话结束时,通过调用mediaPlayer.start()再次启动音频

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

现在我该怎么办?

任何帮助都是可观的。

谢谢你。

Cod*_*erP 5

音频开始,但在 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;
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因,媒体播放器由于网络问题而无法连接到服务器,则会出现此类错误。这可能是由于媒体播放器无法连接到服务器而导致的互联网连接不良或某些与网络相关的原因。媒体播放器可能会抛出一些其他类似的错误代码,例如超时或服务器死机:

/** 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;
Run Code Online (Sandbox Code Playgroud)

现在我该怎么办?

要在运行时处理媒体播放器生成的错误,您应该实现错误侦听器。您可以按照自己喜欢的方式处理错误,例如重新启动播放器。

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;
            }
        });
Run Code Online (Sandbox Code Playgroud)