代码之家  ›  专栏  ›  技术社区  ›  Vishal Chhodwani

MediaPlayer错误(1,-1004)

  •  4
  • Vishal Chhodwani  · 技术社区  · 9 年前

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

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

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

    现在问题来了,当有一个来电,电话开始响,我通过呼叫暂停歌曲 mediaPlayer.pause() 从我的广播接收器类。

    电话通话结束后,通过呼叫再次启动音频 mediaPlayer.start()

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

    现在我该怎么办?

    任何帮助都是可观的。

    非常感谢。

    1 回复  |  直到 9 年前
        1
  •  6
  •   CoderP    8 年前

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

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

    如果由于某些原因,媒体播放器由于网络问题无法连接到服务器,则会出现此类错误。这可能是该实例的internet连接不好,或者由于某些网络相关原因,媒体播放器无法连接到服务器。媒体播放器可能会抛出一些类似的错误代码,如超时或服务器死机:

    /** 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;
                }
            });