2013-07-01 2 views
1

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

} 

ответ

0

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

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

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

+0

Спасибо .. Я пробовал это, мой класс расширяет ContentObserver, эти методы не определены. Не можете использовать их. – Dave

+0

Итак, как получается 'initialVolume' и может ли переменная' delta' быть нулевой в какой-то момент? – g00dy

+0

AudioManager audio = (AudioManager) context.getSystemService (Context.AUDIO_SERVICE); \t \t initialVolume = audio.getStreamVolume (AudioManager.STREAM_RING); – Dave

Смежные вопросы