8

我正在使用特定中间件(不重要)在 Android 中开发 TV-Remote Simulator 应用程序。

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

这就是我最后尝试的(其中一个按钮的代码,除了名称之外,另一个必须相同):

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

我还尝试使用简单的线程,例如按下按钮时的增量 - 减量计数器,但都没有工作。该应用程序适用于其余按钮(通道等),但完全忽略了音量变化。

4

2 回答 2

3

您忘记添加休息时间;在 MotionEvent.ACTION_DOWN: 案例的末尾。这意味着行pressedUp = 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;
}
于 2012-11-27T12:36:29.777 回答
2

你有没有考虑过

于 2012-11-27T12:02:07.587 回答