【问题标题】:Timer getting called repeatedly计时器被反复调用
【发布时间】:2013-07-01 20:50:23
【问题描述】:

我正在开发一个 android 应用程序,我想在按下音量减小按钮时启动计时器,并在按下音量增大按钮时停止计时器,并在再次降低音量时重新启动计时器等等。

问题是,即使在我清除并取消它之后,时间也没有停止。它不断循环自己。

请检查下面的代码,告诉我可能有什么问题。

    @Override
public void onChange(boolean selfChange) 
{
    super.onChange(selfChange);

    AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    int currentVolume = audio.getStreamVolume(AudioManager.STREAM_RING);

    int delta=initialVolume-currentVolume;

    //if down pressed
    if(delta>0)
    {
        Log.e("delta","down");
        downpress = "yes";
        downpressdonefirsttime = "yes";
        timer = new Timer();
    }

    //if up pressed
    else if(delta < 0)
    {
        Log.e("delta","up");
    }

    //if down + up pressed
    else if(delta == 0)
    {
        if(downpress.equalsIgnoreCase("yes"))
        {
            Log.e("inisde","delta is 0 , shake it!!");
        }
    }


    if(downpressdonefirsttime.equalsIgnoreCase("yes"))
    {
        if(downpress.equalsIgnoreCase("yes"))
        {
            timer.scheduleAtFixedRate(new TimerTask() 
            {

                @Override
                public void run() 
                {
                    time = ++time;


                    Log.e("inside","time run , time is" + time);

                    if(time <= 5)
                    {
                        Log.e("inside","time less than 5");
                        downpressdonefirsttime = "no";
                    }

                    if(time > 5)
                    {
                        Log.e("inside","time greater than 5");

                        downpress = "no";
                        time = 0;

                        timer.cancel();
                        timer.purge();
                    }

                }



            }, 0, 1000);
        }
    }

}

【问题讨论】:

    标签: android timer timertask contentobserver


    【解决方案1】:

    你可以试试这个代码sn-p:

    public boolean onKeyDown(int keyCode, KeyEvent event) { 
       if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { 
           // On Volume DOWN
           return true;
       }
    else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){
           // On Volume UP
           return true;
    }
    else {
           return super.onKeyDown(keyCode, event); 
    }
    

    这样您就可以确定这些按钮已被按下。如果问题仍然存在,则可能与按钮按下无关。 }

    【讨论】:

    • 谢谢..我试过了,我的类扩展了 ContentObserver,这些方法是未定义的..不能使用它们。
    • 好的,那么initialVolume 是如何获得的,delta 变量是否可以在某个时候为空?
    • AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); initialVolume = audio.getStreamVolume(AudioManager.STREAM_RING);
    猜你喜欢
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多