Skip to content Skip to sidebar Skip to footer

How To Generate Key Presses Programmatically Android

In my application when the user presses DPAD_LEFT, i want to generate two DPAD_UP presses. I know it can be done using a method like this: @Override private boolean onKeyDown(int k

Solution 1:

Create another class which is extending InputMethodService and call it from your application.

Solution 2:

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

Solution 3:

If you want to generate a key event that gets passed through the event pipeline and is fully handled (characters as well as special keys such as arrows - resulting in change focus) you must tap into the base of things. you can create an implementation of input method service but this is laborious. An easyer way is to get the handler of the current view hierarchy and send a message to it like this:

publicfinalstaticintDISPATCH_KEY_FROM_IME=1011;

KeyEventevt=newKeyEvent(motionEvent.getAction(), keycode);
Messagemsg=newMessage();
msg.what = DISPATCH_KEY_FROM_IME;
msg.obj = evt;

anyViewInTheHierarchy.getHandler().sendMessage(msg);

Simple :)

Solution 4:

I have not tried this (can't right now, sorry), and it does feel a bit like a hack, but couldn't you do something like this:

@OverrideprivatebooleanonKeyDown(int keyCode, KeyEvent event) {

   if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
        super.onKeyDown(KeyEvent.KEYCODE_DPAD_UP,event);  
        returnsuper.onKeyDown(KeyEvent.KEYCODE_DPAD_UP,event);  
   }
   returnsuper.onKeyDown(keyCode,event);
}

Ofcourse, you could create another class and call that from your application.

Post a Comment for "How To Generate Key Presses Programmatically Android"