How can I programmatically simulate a key press on a Droid? I would like to mimic a manual key press (appearing on the droid that someone is pressing a key but it is being done programmatically).
There are solutions out there involving IWindowManager
, but that isn't an option anymore in the new SDK.
You can use instrumentation, ie following code called from onCreate of your activity will cause menu to be opened and closed multiple times:
new Thread(new Runnable() {
@Override
public void run() {
try {
Instrumentation inst = new Instrumentation();
for ( int i = 0; i < 10; ++i ) {
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
Thread.sleep(2000);
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
Thread.sleep(2000);
}
}
catch(InterruptedException e){
}
}
}).start();
...but I am not sure if this is what you are after
If you have a view that want to consume the event you can use BaseInputConnection class and its sendKeyEvent method.
To use it you will need to specify a target view (e.g an EditText) that will receive the KeyEvent. For example:
EditText editText;
BaseInputConnection inputConnection = new BaseInputConnection(editText, true);
inputConnection.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_POUND));
The result of this is like user would actually pressed # key (while having the edit text focused).
You can also use input text
, i.e:
From computer via adb
:
adb shell input text 'example\\@email.com'
From shell
:
input text 'example\\@email.com'