Повторный вызов таймера

Я разрабатываю приложение для 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);
        }
    }

}

person Dave    schedule 01.07.2013    source источник


Ответы (1)


Вы можете попробовать с этим фрагментом кода:

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

Таким образом, вы можете быть уверены, что эти кнопки были нажаты. Если проблема не устранена, возможно, она не связана с нажатием кнопок. }

person g00dy    schedule 01.07.2013
comment
Спасибо .. я пробовал это, мой класс расширяет ContentObserver, эти методы не определены .. не могу их использовать. - person Dave; 01.07.2013
comment
Хорошо, тогда как получается initialVolume и может ли переменная delta в какой-то момент быть нулевой? - person g00dy; 01.07.2013
comment
AudioManager audio = (AudioManager) context.getSystemService (Context.AUDIO_SERVICE); InitialVolume = audio.getStreamVolume(AudioManager.STREAM_RING); - person Dave; 01.07.2013