媒体播放器onError从未调用过

时间:2017-04-12 09:35:17

标签: android setonerrorlistener

永远不会调用onError回调。我看到这是一个老虫子,它是否可能从未被解决过?

我试图在流式传输或缓冲之前将我的模拟设备置于飞行模式,我也设置了一个按钮来强制错误的媒体播放器状态,但这些测试都没有调用onError方法。

我尝试过Nougat和Lollipop。

public class StreamAudioDemo extends Activity implements OnClickListener,
    OnPreparedListener, OnErrorListener, OnCompletionListener {



 MediaPlayer mp;
    Button bt;
    Button bt2;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_stream_audio_demo);
        bt = (Button) findViewById(R.id.play);
        bt2 = (Button) findViewById(R.id.errore);
        bt.setOnClickListener(this);
        bt2.setOnClickListener(this);
    }

    @Override
    public void onPrepared(MediaPlayer mp) {
        Log.i("Stream Audio", "prepare finished");
        mp.start();
    }

    @Override
    public void onClick(View v) {
        if (v.equals(bt)) {
            try {
                mp = new MediaPlayer();
                mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mp.setOnPreparedListener(this);
                mp.setOnErrorListener(this);
                mp.setDataSource("http://nr6.newradio.it:9136/stream");
                mp.prepareAsync();
                mp.setOnCompletionListener(this);
            } catch (Exception e) {
                Log.e("Stream Audio", e.getMessage());
            }
        } else if (v.equals(bt2)) {
            if (mp!=null) {
                mp.prepareAsync();
            }
        }
    }

    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        Log.d("ERROR", "ERROR");
        return true;
    }

    @Override
    public void onCompletion(MediaPlayer mp) {
        Toast.makeText(getApplicationContext(), "Completed", Toast.LENGTH_LONG).show();
    }
}

修改

  

新建的之间有一个微妙但重要的区别   调用reset()后的MediaPlayer对象和MediaPlayer对象。   调用诸如的方法是一个编程错误   getCurrentPosition(),getDuration(),getVideoHeight(),   getVideoWidth(),setAudioAttributes(AudioAttributes),   setLooping(boolean),setVolume(float,float),pause(),start(),   在空闲时停止(),seekTo(int,int),prepare()或prepareAsync()   这两种情况的状态。如果在a之后立即调用这些方法中的任何一个   构造了MediaPlayer对象,用户提供了回调方法   内部播放器不会调用OnErrorListener.onError()   引擎和物体状态保持不变;但如果这些方法   在reset()之后调用,用户提供了回调方法   OnErrorListener.onError()将由内部播放器调用   引擎和对象将被转换为错误状态。

根据参考文献说我已经在onCreate方法中移动了玩家创建,并且我刚刚创建了mp.reset(),但没有任何改变。

0 个答案:

没有答案