2013-07-01 3 views
1

나는 안드로이드 애플 리케이션을 개발 중이다. 볼륨 다운 버튼을 누르면 타이머가 시작되고, 볼륨 업 버튼을 누르면 타이머가 멈추고, 다시 볼륨을 낮추면 타이머가 다시 시작된다.반복적으로 호출되는 타이머

문제는 내가 퍼지하고 취소 한 후에도 멈추지 않는 문제입니다. 그것 자체가 반복적으로 반복됩니다.

아래 코드를 확인하고 잘못된 부분이 있는지 알려주십시오.

@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' 변수는 null이 될 수 있습니까? – g00dy

+0

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