Java Android 2.2中的Shoutcast流错误(0,0),但在Android 2.3及更高版本中有效
我正在尝试在我的Android应用程序上播放广播流。我用的是MediaPlayer。下面我在mainActivity上运行的代码与实例化、setDataSource、prepareAsync和play一样简单。当我按下UI中的播放按钮时,会调用StartPlay方法:Java Android 2.2中的Shoutcast流错误(0,0),但在Android 2.3及更高版本中有效,java,android,eclipse,Java,Android,Eclipse,我正在尝试在我的Android应用程序上播放广播流。我用的是MediaPlayer。下面我在mainActivity上运行的代码与实例化、setDataSource、prepareAsync和play一样简单。当我按下UI中的播放按钮时,会调用StartPlay方法: public void onPlayOrStop(View v) { if (v == btnPlay) { startPlaying(); } else if (v ==
public void onPlayOrStop(View v) {
if (v == btnPlay) {
startPlaying();
} else if (v == btnStop) {
stopPlaying();
}
}
private void startPlaying() {
btnStop.setEnabled(true);
btnStop.setVisibility(View.VISIBLE);
btnPlay.setEnabled(false);
btnPlay.setVisibility(View.INVISIBLE);
pbProgramaPlay.setVisibility(View.VISIBLE);
if (player == null) {
player = new MediaPlayer();
}
else {
if (player.isPlaying()) {
player.stop();
}
player.reset();
}
try {
player.setDataSource("http://67.213.213.143:8048"); // a nice Hard Rock radio from shoutcast
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
player.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
public void onBufferingUpdate(MediaPlayer mp, int percent) {
pbProgramaPlay.setSecondaryProgress(percent);
}
});
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
pbProgramaPlay.setVisibility(View.INVISIBLE);
btnStop.setVisibility(View.INVISIBLE);
btnStop.setEnabled(false);
btnPlay.setVisibility(View.VISIBLE);
btnPlay.setEnabled(true);
pbProgramaPlay.setProgress(0);
pbProgramaPlay.setSecondaryProgress(0);
}
});
player.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
return false;
}
});
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
player.start();
vlDuracaoProgramaPlay = player.getDuration();
atualizaProgressBarPlay();
}
});
player.prepareAsync();
}
private void stopPlaying() {
if (player != null) {
if(player.isPlaying()) {
player.stop();
}
player.release();
player = null;
}
btnPlay.setEnabled(true);
btnPlay.setVisibility(View.VISIBLE);
btnStop.setEnabled(false);
btnStop.setVisibility(View.INVISIBLE);
pbProgramaPlay.setVisibility(View.INVISIBLE);
}
在安卓2.3设备上运行时,它运行良好。几秒钟后,流开始了,我能听到收音机的声音。
在安卓2.2设备上运行时,它会一直运行,直到我调用player.prepareAsync。我一直在等我的MediaPlayer.OnPreparedListener的电话。但它从未被称为。相反,我的MediaPlayer.OnErrorListener被解雇了
使用debug,我从
public boolean onErrorMediaPlayer mp,int what,int extra方法
从EclipseIDE查看LogCat,它显示Error0,0
有人面对过这个错误吗?我在StackOverflow中没有发现此错误。只有当我运行旧的安卓2.2设备时才会发生这种情况
我的版本是8
我的目标版本是19
正如我在Android文档中所读到的,我相信这段代码必须在2.2和2.3中一样工作。我说得对吗?为什么不呢?我会比较不同平台之间媒体播放器的实现。。。但是,如果2.2设备的活动率低于1%。。。真的值得你花时间吗?@323go我的设备是2.2,我想支持该版本及以上。我认为2.2及以上版本的实现与文档中所写的相同。这对我来说很重要,因为我希望我的应用程序能够接触到一些fogotten设备及其用户。