Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fake KeyEvent doesn't work *exactly* like "real" button. Why?

I am trying to invoke my main activity's onKeyDown() with KEYCODE_BACK, so that it behaves as if I pressed the 'back' button myself. I do that using the following code:

   KeyEvent goBackDown = new KeyEvent(0,0,KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_BACK,0,0);
    goBackDown.dispatch(activity);
    SystemClock.sleep(50);  // as if human pressed the key
    KeyEvent goBackUp = new KeyEvent(0,0,KeyEvent.ACTION_UP,KeyEvent.KEYCODE_BACK,0,0);
    goBackUp.dispatch(activity);

My activity's onKeyDown() currently only calls:

return super.onKeyDown(keyCode, event);

Yet, unlike the real Back button, when the "fake" code is called, the activity refuses to become invisible.

Why?

like image 972
srf Avatar asked Apr 22 '11 01:04

srf


1 Answers

use

dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_BACK));

http://developer.android.com/reference/android/view/View.html#dispatchKeyEvent%28android.view.KeyEvent%29

like image 113
Aleadam Avatar answered Oct 01 '22 10:10

Aleadam