0

我在资产文件夹中有一个带有曲目的媒体播放器,我想为每首歌曲制作一个开始/停止按钮。我可以播放它,但是如果我再次单击该按钮,它不会停止音乐,它将开始另一个音乐而不停止第一个: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)

4

2 回答 2

0

是因为你的呼唤

player = new MediaPlayer();

这是创建一个新的 mediaPlayer 实例,而不是引用同一个实例来测试是否有东西已经在播放并能够停止它。将您的新 MediaPlayer() 移到 onClick 之外,它应该会自行运行。

于 2013-01-22T00:08:36.210 回答
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) { }
于 2014-02-11T06:42:13.023 回答