永远不会调用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(),但没有任何改变。