Android 切换按钮可使mediaplayer同时播放两次

Android 切换按钮可使mediaplayer同时播放两次,android,android-activity,android-mediaplayer,android-button,Android,Android Activity,Android Mediaplayer,Android Button,我有一个mediaplayer,可以在下面的活动中播放音乐。问题是,音乐会转移到所有其他活动中,这很好。但当我开始播放音乐时,转到另一个活动,然后再回到下面的活动,切换按钮已从打开变为关闭。因此,如果我单击togglebutton,即使音乐仍在播放,音乐仍会再次启动,因此现在音乐一次播放两次!如何让togglebutton知道音乐正在播放,以便当我返回活动时,togglebutton从一开始就处于打开状态?默认情况下是关闭的 public class SpelaActivity extends

我有一个mediaplayer,可以在下面的活动中播放音乐。问题是,音乐会转移到所有其他活动中,这很好。但当我开始播放音乐时,转到另一个活动,然后再回到下面的活动,切换按钮已从打开变为关闭。因此,如果我单击togglebutton,即使音乐仍在播放,音乐仍会再次启动,因此现在音乐一次播放两次!如何让togglebutton知道音乐正在播放,以便当我返回活动时,togglebutton从一开始就处于打开状态?默认情况下是关闭的

public class SpelaActivity extends Activity {

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

    final MediaPlayer mediaPlayer = MediaPlayer.create(getBaseContext(), R.raw.ljudfil);

    ToggleButton musikknapp = (ToggleButton) findViewById(R.id.togglemusik);
    musikknapp.setOnCheckedChangeListener (new CompoundButton.OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
        if (isChecked) {
            mediaPlayer.start();
        } else {
            mediaPlayer.pause();
        }
    }
});
    mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
            mediaPlayer.release();
        }
    });

}
}

您需要保存ToggleButton状态。 请尝试以下代码:

public class MainActivity extends Activity {

    private ToggleButton toggleButton;
    private static Bundle bundle = new Bundle();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toggleButton = (ToggleButton)findViewById(R.id.toggleButton1);
    }



    @Override
    public void onPause() {
        super.onPause();
        bundle.putBoolean("ToggleButtonState", toggleButton.isChecked());
    }

    @Override
    public void onResume() {
        super.onResume();
        toggleButton.setChecked(bundle.getBoolean("ToggleButtonState",false));
    }
如果需要,请添加这些条件!mediaPlayer.isplay


成功使mediaplayer在单击“后退”按钮时停止:

final ToggleButton togglemusik = (ToggleButton) findViewById(R.id.togglemusik);
    mp = MediaPlayer.create(this, R.raw.ljudfil);
    togglemusik.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (togglemusik.isChecked()) {
                mp.start();
            } else {
                mp.pause();
            }   
        }
    });
}
    @Override
    public void onPause() {
        super.onPause();
        if (mp !=null) {
            mp.release();
            mp = null;
        }
        }

在切换到另一个活动后,当我返回到该活动时,它会将togglebutton设置为打开,但它也会使音乐在我未单击togglebutton的情况下启动!?所以我还是无法控制音乐是开还是关?或者我应该把这个代码放在主活动中吗?验证mediaplayer正在播放:mp.isPlayingHow是什么意思?我试图在if-else语句中将ischeck改为mediaPlayer.isPlaying,但没有成功。和以前一样,在我进行特定活动时,togglebutton执行它应该执行的操作。一旦我离开它回来,当麻烦开始发生的时候。是否有某种方法可以隔离mediaplayer,以便在该活动中仅播放音乐?您的意思是如果!mediaPlayer.isPlaying{?我尝试了你的两种备选解决方案,但不幸的是没有解决问题。检查这些链接有media player的代码:谢谢,我会检查的!
final ToggleButton togglemusik = (ToggleButton) findViewById(R.id.togglemusik);
    mp = MediaPlayer.create(this, R.raw.ljudfil);
    togglemusik.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (togglemusik.isChecked()) {
                mp.start();
            } else {
                mp.pause();
            }   
        }
    });
}
    @Override
    public void onPause() {
        super.onPause();
        if (mp !=null) {
            mp.release();
            mp = null;
        }
        }