点击时将音频按钮从播放更改为暂停,反之亦然

时间:2017-07-23 11:59:01

标签: android

我想在我的应用程序中使用一个播放按钮,当点击播放音频并更改为暂停时,单击暂停按钮时音频停止,按钮变为再次播放,依此类推。但按钮没有按预期工作。请帮忙。我在下面添加我的java代码。

public class surah extends AppCompatActivity {

    MediaPlayer mp = new MediaPlayer();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_surah);
        mp=MediaPlayer.create(surah.this, R.raw.surahkahf);


        final ImageView audio = (ImageView)findViewById(R.id.btn);

        audio.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if(mp.isPlaying()){
                    mp.stop();
                    audio.setBackgroundResource(R.drawable.play);
                    try {
                        mp.prepare();
                    }catch (IllegalStateException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                else {
                    mp.start();
                    audio.setImageResource(R.drawable.pause);

                }
            }
        });
    }
}

2 个答案:

答案 0 :(得分:0)

首先,正如aborocz在评论中提到的那样,您可能打算暂停播放而不是停止播放,因此您要使用的方法是pause()。在这种情况下,您不需要再次准备MediaPlayer,它将从恢复播放时暂停的相同位置开始。

其次,isPlaying()方法并不特别适合此目的。存在阻止期望行为的竞争条件。来自Android MediaPlayer documentation

  

请注意从Started状态到Paused状态的转换   反之亦然在播放器引擎中异步发生。有可能   在调用isPlaying()之前更新状态需要一些时间,   对于流内容,它可以是几秒钟。

相反,存储您自己的布尔值。

public class surah extends AppCompatActivity {

    private MediaPlayer mp;
    private boolean isMediaPlaying = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_surah);
        mp = MediaPlayer.create(surah.this, R.raw.surahkahf);

        final ImageView audio = (ImageView)findViewById(R.id.btn);

        audio.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (isMediaPlaying) {
                    mp.pause();
                    audio.setBackgroundResource(R.drawable.play);
                    isMediaPlaying = false;
                } else {
                    mp.start();
                    audio.setImageResource(R.drawable.pause);
                    isMediaPlaying = true;
                }
            }
        });
    }
}

答案 1 :(得分:0)

使用 audio.setImageResource(R.drawable.play) 而不是 audio.setBackgroundResource(R.drawable.play)。使用 mp.pause() 而不是 mp.stop();