当活动暂停时,如何正确停止倒数计时器中的媒体播放器?

Posted

技术标签:

【中文标题】当活动暂停时,如何正确停止倒数计时器中的媒体播放器?【英文标题】:How do I correctly stop a Media Player in a CountDown Timer when the activity is Paused? 【发布时间】:2016-10-15 15:52:30 【问题描述】:

当活动暂停时,我可以在倒数计时器完成之前成功取消它。但是,在取消计时器的 OnTick 方法中实现的媒体播放器不会停止 5-8 秒。当活动暂停时,在倒数计时器中禁用媒体播放器声音的正确方法是什么?

private Button soundOn;
private Button soundOff;

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



   SharedPreferences savedSoundToggle = getSharedPreferences(PREFS_SOUNDTOGGLE, 0);
    final SharedPreferences.Editor soundEditor = savedSoundToggle.edit();

    nSound = savedSoundToggle.getInt("SoundOnorOff", 0);


    if(nSound == 1)
        soundOff.setEnabled(false);
        soundOff.setVisibility(View.INVISIBLE);
        soundOn.setEnabled(true);
        soundOn.setVisibility(View.VISIBLE);
    
    else if( nSound == 0)
        soundOn.setEnabled(false);
        soundOn.setVisibility(View.INVISIBLE);
        soundOff.setEnabled(true);
        soundOff.setVisibility(View.VISIBLE);
    



public void OneGame()

  final MediaPlayer intro = MediaPlayer.create(getApplicationContext(), R.raw.minicycleaudio);
  final MediaPlayer go = MediaPlayer.create(getApplicationContext(), R.raw.flashgoaudio);

  getReadyTimer = new CountDownTimer(6000, 1000) 

        public void onTick(long millisUntilFinished) 

            getReadyTimeText.setText("" + millisUntilFinished / 1000);

            if(soundOn.isEnabled())
                intro.start();
            
            if(soundOff.isEnabled())
                if(intro.isPlaying())
                    intro.pause();
                
            
         

          public void onFinish() 

            if(intro.isPlaying()) 
                intro.stop();
                intro.release();
            
             if(soundOn.isEnabled()) 
                go.start();
            


@Override
public void onPause() 

  super.onPause();
  getReadyTimer.cancel();

  

我几乎 100% 肯定,当活动暂停时,倒数计时器会被取消,因为 onFinish() 函数中的媒体播放器永远不会被调用。为什么onTick方法中的媒体播放器一直在播放?

【问题讨论】:

【参考方案1】:

我想通了:要在 CountDown Timer 中取消媒体播放器,当活动暂停时...您必须将 MediaPlayer 声明为静态的,而不是最终的。

static  MediaPlayer intro;

 @Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_level_one);
    getReadyTimeText = (TextView) findViewById(R.id.levelonetimerText);

 public void OneGame()
    intro = MediaPlayer.create(getApplicationContext(), R.raw.minicycleaudio);



【讨论】:

以上是关于当活动暂停时,如何正确停止倒数计时器中的媒体播放器?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个倒数计时器,当屏幕关闭时停止并“等待”,重新打开时恢复。安卓

当活动不在前面时,在Android中暂停CountDownTimer

Flutter:当倒数计时器达到 0 时执行动作

MVC 中的倒数计时器

Android:当活动死亡时,计时器被孤立

屏幕锁定时会停止WebView媒体内容(调用活动的onStop)