【问题标题】:ToggleButton makes mediaplayer play twice at onceToggleButton 使媒体播放器一次播放两次
【发布时间】:2014-04-22 10:36:22
【问题描述】:

我有一个媒体播放器,可以在下面的活动中播放音乐。问题是,音乐转移到所有其他活动,这很好。但是当我开始播放音乐时,转到另一个活动,然后返回到下面的活动,切换按钮已从打开变为关闭。因此,如果我单击切换按钮,即使音乐仍在播放,音乐也会重新开始,所以现在音乐一次播放两次!如何让切换按钮知道音乐正在播放,所以当我回到活动时,切换按钮从一开始就“打开”?默认为“关闭”。

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();
        }
    });

}
}

【问题讨论】:

    标签: android android-activity android-mediaplayer android-button


    【解决方案1】:

    您需要保存 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));
        }
    

    【讨论】:

    • 当我切换到另一个活动后回到活动时,这会将切换按钮设置为“打开”,但它也会让音乐在我不点击切换按钮的情况下开始!?所以我仍然无法控制音乐是“开”还是“关”?还是我应该将此代码放在主要活动中?
    • 验证媒体播放器是否正在播放:mp.isPlaying()
    • 你是什么意思?我试图在 if else 语句中将 isChecked 更改为 mediaPlayer.isPlaying() 但没有这样做。和以前一样,当我在那个特定的活动中时,切换按钮会做它应该做的事情。一旦我离开它并回来,当麻烦开始发生时。是否有某种方法可以将媒体播放器隔离为仅在该活动中播放音乐?
    【解决方案2】:

    添加这些条件if(!mediaPlayer.isPlaying())

     public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                if (isChecked) {
                    if(!mediaPlayer.isPlaying())
                    mediaPlayer.start();
                } else {
                    if(!mediaPlayer.isPlaying())
                    mediaPlayer.pause();
                }
            }
    

    【讨论】:

    【解决方案3】:

    设法让媒体播放器在单击后退按钮时停止:

    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;
            }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多