5

Я пытаюсь реализовать службу метода ввода, которая получает намерения, отправленные удаленным клиентом, и в ответ на это отправляет соответствующий KeyEvent.Как отправить KeyEvents через службу метода ввода в диалоговое окно или в меню Spinner?

Я использую в input method service этот метод

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

отправить KeyEvents как в Simple Sofykeyboard Sample, и он работает в доме, в Activities. .. но это не работает, когда диалог или меню Spinner находится на переднем плане.

Мероприятия отправляются на номер parent activity behind the Dialog.

Есть ли способ отправить ключи и управлять устройством, например, используя аппаратные ключи из метода ввода?

Лучшее объяснение того, что я пытаюсь сделать:

Я вроде ПИСЬМЕННЫЕ метод ввода, который позволяет управлять устройством с пульта дистанционного управления.

Я пишу в клиенте (приложение Java на моем рабочем столе компьютера) команду (например, «UP»), сервер на устройстве с sendBroadcast() посылает намерение с информацией, и приемник в способе ввода получает его и вызывает keyDownUp с keycodeDPAD_UP key. Обычно он работает, но когда я перехожу в приложение, которое показывает диалог, метод keyDownUp не отправляет событие ключа в dialog, например, для выбора да или нет но он держит управление activty за Dialog.

Here Я нашел кого-то с моей же проблема ... но нет ответа ...

ответ

1

Во-первых, позвольте мне объяснить, что я понимаю.

  • Вы идете в приложение
  • Вы открываете диалоговое в этой деятельности (например перейти на смс приложение, долгое нажатие нить)
  • Вы нажимаете клавишу HOME.
  • Перейти к другому приложению, которое отправляет намерение
  • IME получает намерение и что-то записывает.

Я не понимаю, как активность с диалогом открывается снова.

AFAIK, при нажатии клавиши в softKeyboard, IME-х onKey(int primaryCode, int[] keyCodes) вызывается и при нажатии жесткий ключ к IME вызывается в:

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

Вы можно попробовать вместо этого использовать эти методы, но я не знаю, исправит ли имидж жесткого ключа. Думаю, это проблема фокуса. Вы пытались получить текст от getCurrentInputConnection(), чтобы узнать, где он стоит?

+0

Я отредактировал мой вопрос, пытаясь прояснить, в чем моя проблема. В вашем примере, когда я открываю диалоговое окно в приложении sms, если я отправляю команду DOWN для ключа DPAD_DOWN, это не делает диалог на переднем плане для прокрутки, но он отправляется на активность позади, ту, которая показывает список сообщений, выбрав сообщение ниже того, на которое я долго нажимал, что делает невозможным закрытие диалогового окна. Я попытался вызвать onKeyDown и onKeyUp, но они не работают ни там, где работал keyDownUp. – shutdown11

+0

getCurrentInputConnection() всегда возвращает соединение с активностью, которая показывает диалог, и никогда не диалог. Вместо использования жестких клавиш вы можете прокручивать диалог, когда он сфокусирован, поэтому мне было интересно, как эмулировать жесткий ключ. – shutdown11

+0

Жесткий ключ, безусловно, может быть смоделирован с помощью Instrumentation class, но требует корневого устройства. –

Смежные вопросы