onResume重新开始播放背景音乐不起作用

时间:2018-04-27 19:53:07

标签: java android onresume onpause background-music

这是我的第一个应用程序,所以这个问题/答案可能非常基本。 我目前有onPause(); ,当玩家离开屏幕时停止播放音乐。我尝试用onResume做类似的事情,这样音乐再次播放(backgroundMusic)。不幸的是,这不起作用。当我按下重置按钮或返回主页并返回游戏页面时,它再次起作用。但是,只要应用程序重新登录屏幕,它就不会加载,就像我希望的那样。

我的代码摘录如下;

package com.example.android.buttongame;

...

公共类MainActivity扩展了AppCompatActivity {

...

MediaPlayer winningSound;
MediaPlayer buttonSound;
MediaPlayer backgroundMusic;


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

    /*
    Plays ticking background noise at the start of this activity. Set on a loop
     */

backgroundMusic = MediaPlayer.create(this, R.raw.ticking_background);

    backgroundMusic.start();
    backgroundMusic.setOnErrorListener(new android.media.MediaPlayer.OnErrorListener() {

        public boolean onError(MediaPlayer mediaplayer, int i, int j)
        {
            return false;
        }
    });
    backgroundMusic.setLooping(true);


}

@Override
public void onResume(){
    super.onResume();
    backgroundMusic.start();
}

public void onPause() {
    super.onPause();
    backgroundMusic.stop();
}



...

public void reset(View v) {

     /*
        Plays button sound
         */
    buttonSound = MediaPlayer.create(MainActivity.this, R.raw.button_sound);
    buttonSound.start();

    /*
     * Refreshes activity
     */

   this.recreate();

}

...     public void homePage(查看视图){

     /*
        Stops background music
         */

    backgroundMusic.stop();

     /*
        Plays button sound
         */
    buttonSound = MediaPlayer.create(MainActivity.this, R.raw.button_sound);
    buttonSound.start();

    /*
    Leads to home page
     */
    Intent homePage = new Intent(this, HomePage.class);
    startActivity(homePage);
}

}

1 个答案:

答案 0 :(得分:1)

backgroundMusic.stop()的地方,你应该使用backgroundMusic.pause(),然后你将实现你想要的目标。

致电stop()停止播放,并在已开始已暂停已准备MediaPlayer > PlaybackCompleted 状态进入已停止状态。 进入已停止状态后,在调用prepare()prepareAsync()MediaPlayer对象设置为已准备之前,无法开始播放再次声明。 调用stop()对已经处于已停止状态的MediaPlayer对象无效。

以下是MediaPlayer的文档,可帮助您了解其 API https://developer.android.com/reference/android/media/MediaPlayer