2016-11-09 13 views
0

android documentationによると、キーのリリースを検出するのと同じくらい簡単でなければなりません:Android:キーボードのプレスリリースイベントの検出方法

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    System.out.println("pressed"); 
    event.startTracking(); 
    return true; 
} 

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    System.out.println("released"); 
    return true; 
} 

が、それを実装しようとすると、期待どおり、それは動作しませんが。

ブルートゥースキーボードのキーが押されたことを検出し、そのときにonKeyDownを1回だけ受信し、同じキーが離されたときに検出する必要があります。私は何か間違っているのですか、あるいはこの希望の結果を得るための他の方法がありますか?

押すと、任意のキーを押したまま、私は、コンソール上で繰り返し、これを取得する:

I/System.out: pressed 
I/System.out: released 
I/System.out: pressed 
I/System.out: released 
I/System.out: pressed 
I/System.out: released 
I/System.out: pressed 
I/System.out: released 

感謝を。

+0

"期待どおりに機能しません" - あなたが期待していることとあなたが得ている結果について詳しく説明したい場合があります。たとえば、「押されている間に多くの通話があります」と正確には何ですか? – CommonsWare

+0

私はキーを押して、それを押し続けると、繰り返します:I/System.out:押され、I/System.out:解放されます。私はそれを押したときに一度「押した」ことを期待し、それを解放すると「解放」する代わりに、「押された」と「解放された」は、任意のキーを押している間に繰り返し呼び出される... – RodrigoFranco

+0

両方のメソッドから 'false'を返します。 – CommonsWare

答えて

0
Use OnTouchListener instead of OnClickListener: 

// this goes somewhere in your class: 
    long lastDown; 
    long lastDuration; 

    ... 

    // this goes wherever you setup your button listener: 
    button.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if(event.getAction() == MotionEvent.ACTION_DOWN) { 
      lastDown = System.currentTimeMillis(); 
     } else if (event.getAction() == MotionEvent.ACTION_UP) { 
      lastDuration = System.currentTimeMillis() - lastDown; 
     } 
    }`enter code here` 
    }); 
+0

しかし、私はOnClickListenerを使用していません...私はonKeyDownとonKeyUpを使用しています。 – RodrigoFranco

関連する問題