按下按钮时如何重复执行某些操作?

问题描述:

我正在使用特定的中间件(不重要)在Android中开发电视远程模拟器应用程序。按下按钮时如何重复执行某些操作?

在音量按钮(音量+和音量 - )的情况下,我想要做的是在按下按钮时重复发送“音量提高”信号。

这就是我在上次尝试(代码按钮之一,其他必须是除了名称相同):

  1. 声明布尔变量

    boolean pressedUp = false; 
    
  2. 宣布为内部类与以下AsyncTask:

    class SendVolumeUpTask extends AsyncTask<Void, Void, Void> { 
    
        @Override 
        protected Void doInBackground(Void... arg0) { 
         while(pressedUp) { 
          SendVolumeUpSignal(); 
        } 
        return null; 
    } 
    

    }

  3. 监听器添加到按钮:

    final Button buttonVolumeUp = (Button) findViewById(R.id.volup); 
    buttonVolumeUp.setOnTouchListener(new View.OnTouchListener() { 
    
        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
         switch (event.getAction()) { 
    
         case MotionEvent.ACTION_DOWN: 
    
          if(pressedUp == false){ 
           pressedUp = true; 
           new SendVolumeUpTask().execute(); 
          } 
    
         case MotionEvent.ACTION_UP: 
    
          pressedUp = false; 
    
        } 
         return true; 
        } 
    }); 
    

我也用简单的线程试图在Increment-Decrement counter while button is pressed,但既不工作。该应用程序对其余的按钮(通道等)工作良好,但音量改变完全被忽略。

你忘了补充一点;在MotionEvent.ACTION_DOWN:case的结尾处。这意味着行UpUp= false;即使在该动作中也会执行。正确的做法是:

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction()) { 

    case MotionEvent.ACTION_DOWN: 

     if(pressedUp == false){ 
      pressedUp = true; 
      new SendVolumeUpTask().execute(); 
     } 
    break; 
    case MotionEvent.ACTION_UP: 

     pressedUp = false; 

} 
    return true; 
} 
+0

谢谢,现在发送信号。但是,它会在短时间内发送很多信号。也许一个柜台应该工作。 – Truncarlos

+4

我建议在SendVolumeUpSignal()之间有一个间隔时间;例如试试这个:'while(pressedUp){SendVolumeUpSignal(); Thread.sleep(100);}' –

+0

有用。感谢:D – Truncarlos

你有没有考虑

  • onKeyDown事件
  • 停止任务的onKeyUp 事件开始您repititive任务是什么?
+1

是不是那些设备的物理键的方法?我的意思是在我的远程应用 – Truncarlos

+0

是触觉的,是的,顾名思义就是这样..但他们不是:-) –

+0

无论如何,以前的答案帮助我够了,谢谢:D – Truncarlos