播放/停止媒体播放器无法正常工作

时间:2013-01-22 00:06:09

标签: android android-mediaplayer

我有一个带有ASSETS文件夹曲目的媒体播放器,我想为每首歌曲制作一个开始/停止按钮。我能够播放它,但如果我再次点击按钮它将不会停止音乐,它将启动另一个而不停止第一个:s。

以下是我正在使用的代码:

        public void onClick(View v) {   

        try {
            AssetFileDescriptor afd = getAssets().openFd("4.mp3");
            player = new MediaPlayer();
            player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
            player.prepare();
            if(player.isPlaying()){
                player.stop();
            } else {
                player.start();
            }
            } 
        catch (IllegalArgumentException e) {    } 
        catch (IllegalStateException e) { } 
        catch (IOException e) { }

    }

编辑1:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    player = new MediaPlayer();

    TextView sound4 = (TextView) findViewById(R.id.cancionCuatro);
    sound4.setOnClickListener(soundFour);

    try {
        AssetFileDescriptor afd = getAssets().openFd("4.mp3");
        player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
        player.prepare();
        } 
    catch (IllegalArgumentException e) {    } 
    catch (IllegalStateException e) { } 
    catch (IOException e) { }

}

OnClickListener soundFour = new OnClickListener() {

    public void onClick(View v) {   

        if(player.isPlaying()){
            player.stop();
        } else {
            player.start();
        }


    }
};      

logcat的: 开始在状态0中调用 错误(-38,0)

2 个答案:

答案 0 :(得分:0)

这是因为你的召唤

player = new MediaPlayer();

这是创建一个新的mediaPlayer实例,而不是引用相同的实例来测试某些内容是否已经播放并且能够阻止它。 将您的新MediaPlayer()移到onClick之外,它应该表现得很好。

答案 1 :(得分:0)

try {if(player.isPlaying()){player.stop();} else {player.start();}if(player!=null) player.release();AssetFileDescriptor afd = getAssets().openFd("4.mp3");player = new MediaPlayer();player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());player.prepare(); } catch (IllegalArgumentException e) {} catch (IllegalStateException e) {} catch (IOException e) { }