How can I track the keys pressed by the user in keyboard in android?
Is this possible or I have to create a keyboard myself?
What could be the possible way ?
Please check Creating An Input Method. This would help you in creating a custom Input Method. You can check the Sample Application in your Android SDK directory. Please follow as per this link.
One way to liste for those is:
#Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// Log the Key that was pressed or do whatever you need
// keyCode contains all the possible keyCode presses
}
else if(keyCode == KeyEvent.KEYCODE_1){
//You can insert catches for each particular keypress here
}
return super.onKeyDown(keyCode, event);
}
All the codes are here in this LINK, take a look at them.
Related
I want to build a instant searchview, which will show the search result immediately in the same layout as soon as a user input anything. So I am googling and decide to use onQueryTextChange to implement that. However I cannot figure out how to "fire" a intent like the normal result which pressing ENTER will lead to, to tell my Activity that there is an event that a user have input something in searchview and you(Activity) should handle it.
Any idea to help?
If I understood you correcty you want to recognize KEY_EVENT (ENTER). I've ended with custom EditText styled like original SearchView, then used OnEditorActionListener:
queryEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
#Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH ||
(event != null && event.getKeyCode()==KeyEvent.KEYCODE_ENTER)) {
performSearch();
return true;
}
return false;
}
});
SearchView don't have setOnEditorActionListener method, thats why I'm using simple EditText
note EditorInfo.IME_ACTION_SEARCH option inside "if", you may request "special" keyboard layout with magnify icon instead of Enter key (but remember that not all keyboards are supporting this option and custom keyboard app may show "usual" layout of keyboard)
android:inputType="text|textNoSuggestions"
android:imeOptions="actionSearch"
I'm trying to make an app which is controlled by a gamepad. I've gotten it to work alright, but Android has some default controls that it uses for navigation when a gamepad is plugged in, such as the B button takes you back a menu. I want to be able to use the buttons that Android has defaults for. Is there a way to disable the default Android controls? I can't find any thing about the default Android gamepad controls, let alone how to disable them.
I figured it out. For anyone who needs this in the future, here's how to do it. When you add in the onKeyDown override command, this is what it looks like.
#Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
return super.onKeyDown(keyCode, event);
}
As I understand it, that return line gives the Android system access to the button presses. However if you make it always return true, the Android system never sees the input. For example:
#Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_BUTTON_A)
{
buttonAPressed = true;
}
return true;
}
I don't know if this is the best way to do it, but that's my work around to it. Hope this helps anyone that needs it!
I'm using chineese printer. It has OS android and also it has a few buttons, on of them is "scan". When I press it I don't see anything in system log. How can I find out the code of this button?
Already tried to find something in logs but didn't see anything related to this button. I even tried not my app log, but system log didn't help. I don't know if this button is working or not
It seems like they used button scan instead of button "menu"
I tried this code and
public boolean onKeyUp(int keyCode, KeyEvent event) {
Log.e("KeyCode",keyCode+"");
if (keyCode == KeyEvent.KEYCODE_MENU) {
Log.e("KeyCode",keyCode+"");
return true;
} else {
return super.onKeyUp(keyCode, event);
}
}
and i got two times
03-24 08:33:41.429 E/KeyCode﹕ 82
03-24 08:33:41.429 E/KeyCode﹕ 82
It means it has the same keycode as Menu button
Doing a simple override in my base activity of onKeyDown, I'm able to capture all key presses except those of the enter and dpad center buttons (as determined via breakpoint). I've no clue as to why - can anyone shed some light on the situation?
EDIT: Quick update - it does capture Dpad center and enter key LONG presses, but still not normal presses.
I know this question is already pretty old but in case some desperate coder got lost I post my answer.
I had a similar problem with my USB keyboard. When anything else except a EditText box was focussed the ENTER key was never caught by onKeyUp or onKeyDown.
if you use dispatchKeyEvent() you get the KeyEvent before it reaches the window and in my case I definitely get the ENTER key.
But cautious, the event is called twice, once for key down and once for key up.
here a sample code:
#Override
public boolean dispatchKeyEvent(KeyEvent event) {
System.out.println(event.getAction() + " " + event.getKeyCode() + " - " + (char) event.getUnicodeChar());
return true;
}
Did you read the documentation?
Key presses in software keyboards will generally NOT trigger this listener, although some may elect to do so in some situations. Do not rely on this to catch software key presses.
Also, your way of capturing keys is very vague. You are not even checking the keyCode sent to you by using:
#Override public boolean onKeyDown(int keyCode, KeyEvent event) { return false; }
You can handle onKey from a View:
public boolean onKey(View v, int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_ENTER:
/* This is a sample for handling the Enter button */
return true;
}
return false;
}
Remember to implement OnKeyListener and to set your listener
viewname.setOnKeyListener(this);
it appears that DPAD keys are acting for the focused items as have been told here:
https://groups.google.com/forum/#!topic/android-developers/HsILBlpsK7I
Although I haven't tried it myself, maybe you can set focus to your view object and attach a key listener function on it.
Update: My colleague had the same problem and this suggestion worked for her. :) She was able to catch the key code from DPAD when the list view is focused.
I am new to Android development and having a problem with what SHOULD be a very simple task. I want to receive KeyEvents whenever a user is typing in an EditText field because I want to save their entered values to data structures in the background on each key stroke.
I have mimic'd the code in the Beginner's Dev guide at http://developer.android.com/resources/tutorials/views/hello-formstuff.html#EditText and set up an OnKeyListener. Here is a snippet of my code:
cell.amountEditText.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
System.err.println("onKey for Amount, key="+event.getDisplayLabel());
if (event.getAction() == KeyEvent.ACTION_DOWN) {
return onKeyDownInAmount(finalPosition, (EditText)v, keyCode, event);
} else {
return false;
}
}
});
Behavior on the emulator is spotty at best, some times it will deliver the KeyEvents for the virtual keyboard, sometimes it won't. When I install the app on my device (HTC Hero which has a virtual keyboard only) then NONE of the events fire. I never receive a single KeyEvent.
What am I doing wrong?
Any help is appreciated.
The onKeyListener only receives events from a hardware keyboard. Use TextWatcher instead.