Java Android 2.2中的Shoutcast流错误(0,0),但在Android 2.3及更高版本中有效

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 ==

我正在尝试在我的Android应用程序上播放广播流。我用的是MediaPlayer。下面我在mainActivity上运行的代码与实例化、setDataSource、prepareAsync和play一样简单。当我按下UI中的播放按钮时,会调用StartPlay方法:

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设备及其用户。