mediaplayer onErrorListener不会捕获错误

时间:2017-08-28 09:08:51

标签: android media-player

我正在开发一个播放http音频流的应用程序,我必须检查音频流是否正常工作。问题是我已经找到了如何做到这一点的方法,但是花了太多时间,我试图减少时间但没有结果。我认为媒体播放器在停止之前重试连接到“死”流10次,所以问题是如何在第一次失败后手动停止重新连接,导致errorListener没有捕获到这个错误。

08-28 08:58:41.211 1335-12727/? E/NuCachedSource2: source returned error -1, 10 retries left

这是我的代码:

 class CheckTask extends AsyncTask<RadioStation, Void, Boolean> {
    @Override
    protected  Boolean doInBackground(final RadioStation... radioStation){




        final MediaPlayer mediaPlayer = new MediaPlayer();

        try {

            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mediaPlayer.setDataSource(radioStation[0].mUrl);

            mediaPlayer.prepareAsync();
            System.out.println(radioStation[0].mName + "prepare Async");
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

                @Override
                public void onPrepared(MediaPlayer mp) {
                    System.out.println(radioStation[0].mName + " OK");
                    mediaPlayer.release();
                }
            });

            mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                @Override
                public boolean onError(MediaPlayer mp, int what, int extra) {
                    System.out.println(radioStation[0].mName + " Error");

                    return true;
                }
            });

        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Exception radio check " + e);
            mediaPlayer.reset();
            mediaPlayer.release();
        }










        return true;

    }



    @Override
    protected  void onPostExecute(Boolean aBoolean){
        super.onPostExecute(aBoolean);


    }

}

1 个答案:

答案 0 :(得分:1)

为什么要在mediaPlayer.release();上致电onPrepared?它应该是mediaPlayer.start()。而且,由于您正在发布Mediplayer onErrorListner,因此无法调用。