8

特定のミドルウェア(重要ではありません)を使用して、AndroidでTV-RemoteSimulatorアプリを開発しています。

ボリュームボタン(ボリューム+とボリューム-)の場合、私がやろうとしているのは、ボタンが押されている間、「ボリュームアップ」信号を繰り返し送信することです。

それが私が最後に試したものです(ボタンの1つのコード、他のボタンは名前を除いて同一でなければなりません):

  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

検討しましたか

  • onKeyDownイベントで反復タスクを開始する
  • onKeyUp イベントでタスクを停止しますか?
于 2012-11-27T12:02:07.587 に答える