English 中文(简体)
How to send KeyEvents through an input method service to a Dialog, or a Spinner menu?
原标题:

I m trying to implement an input method service that receives intents sent by a remote client, and in response to those sends an appropriate KeyEvent.

I m using in the input method service this method

private void keyDownUp(int keyEventCode) 
{
    getCurrentInputConnection().sendKeyEvent(
              new KeyEvent(KeyEvent.ACTION_DOWN, keyEventCode));
    getCurrentInputConnection().sendKeyEvent(
              new KeyEvent(KeyEvent.ACTION_UP, keyEventCode));
}

to send KeyEvents as in the Simple Sofykeyboard Sample, and it works in the home, in Activities... but it doesn t works when a Dialog or the menu of a Spinner is in foreground.

The events is sent to the parent activity behind the Dialog.

Is there any way to send keys and control the device like using the hardware keys from an input method?

Better explanation on what I m trying to do:

I am kind of writng an Input Method that allows to control the device from remote.

I write in a client (a java application on my desktop pc) a command (for example "UP"), a server on the device with sendBroadcast() sends the intent with the information, and a receiver in the input method gets it and call keyDownUp with the keycode of the DPAD_UP key. It generally works, but when I go to an app that shows a dialog, the keyDownUp method don t sends the key event to the dialog, for example for select the yes or not buttons, but it keeps to control the activty behind the Dialog.

Here I have found someone with my same problem... but no answer...

问题回答

First, let me explain what I did understand.

  • You go to an app
  • You open a Dialog in that activity (For example go to sms app, long press a thread)
  • You press the HOME key.
  • Go to a different application that sends the intent
  • The IME gets the intent, and writes something down.

I don t understand how the activity with the Dialog gets opened again.

AFAIK, when you press a key in the softKeyboard, IME s onKey(int primaryCode, int[] keyCodes) is called and when you press a hard key the IME is called at:

  • public boolean onKeyUp(int keyCode, KeyEvent event)
  • public boolean onKeyDown(int keyCode, KeyEvent event)

You can try calling that methods instead, but I don t know if emulating a hard key would fix it. I guess it s a focus issue. Did you tried getting the text from getCurrentInputConnection() to see where it is standing?





相关问题
Android - ListView fling gesture triggers context menu

I m relatively new to Android development. I m developing an app with a ListView. I ve followed the info in #1338475 and have my app recognizing the fling gesture, but after the gesture is complete, ...

AsyncTask and error handling on Android

I m converting my code from using Handler to AsyncTask. The latter is great at what it does - asynchronous updates and handling of results in the main UI thread. What s unclear to me is how to handle ...

Android intent filter for a particular file extension?

I want to be able to download a file with a particular extension from the net, and have it passed to my application to deal with it, but I haven t been able to figure out the intent filter. The ...

Android & Web: What is the equivalent style for the web?

I am quite impressed by the workflow I follow when developing Android applications: Define a layout in an xml file and then write all the code in a code-behind style. Is there an equivalent style for ...

TiledLayer equivalent in Android [duplicate]

To draw landscapes, backgrounds with patterns etc, we used TiledLayer in J2ME. Is there an android counterpart for that. Does android provide an option to set such tiled patterns in the layout XML?

Using Repo with Msysgit

When following the Android Open Source Project instructions on installing repo for use with Git, after running the repo init command, I run into this error: /c/Users/Andrew Rabon/bin/repo: line ...

Android "single top" launch mode and onNewIntent method

I read in the Android documentation that by setting my Activity s launchMode property to singleTop OR by adding the FLAG_ACTIVITY_SINGLE_TOP flag to my Intent, that calling startActivity(intent) would ...

From Web Development to Android Development

I have pretty good skills in PHP , Mysql and Javascript for a junior developer. If I wanted to try my hand as Android Development do you think I might find it tough ? Also what new languages would I ...

热门标签