MediaPlayer.pause()无法在Moto G Turbo Edition Android 6.0中运行

时间:2016-03-03 09:51:28

标签: android android-mediaplayer

我制作了一个示例应用程序,其中只有两个按钮 1.开始(开始音乐) 2.停止(停止音乐)。

这是我的代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    MediaPlayer mp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        Button b1 = (Button) findViewById(R.id.button_start);
        b1.setOnClickListener(this);
        Button b2 = (Button) findViewById(R.id.button_stop);
        b2.setOnClickListener(this);
        mp = MediaPlayer
                .create(getApplicationContext(), R.raw.alarm);
        try {
            mp.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
        mp.setLooping(true);
        mp.setVolume(0.5f,0.5f);

    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        switch (id) {
            case R.id.button_start:
                startAlarm();
                break;
            case R.id.button_stop:
                stopAlarm();
        }
    }

    private void stopAlarm() {
        if(mp.isPlaying()) {
            Log.e("XXX","Tone Paused");
            mp.pause();
        }
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(mp.isPlaying()){
                    Log.e("XXX", "tone still playing ...");
                }
                Log.e("XXX", "Thread stopped");
            }
        }).start();
    }

    private void startAlarm() {
        mp.start();
    }
}

现在我看到mp.pause()正在调用,之后mp.isPlaying()返回false。但音乐一直在播放,直到我关闭设备才会停止播放。

我不确定这是否是android os或硬件的错误。我检查了其他Android 6.0设备,但它工作正常。

有人可以告诉我可能的根本原因吗?

提前致谢!!!

1 个答案:

答案 0 :(得分:0)

更改stopAlarm()方法

    private void stopAlarm() {
    if(mp.isPlaying()) {
        mp.stop();
        mp.reset();
        mp.release();
    }      
    }