5

我試圖實現一個輸入方法服務,接收遠程客戶端發送的意圖,並響應這些發送適當的KeyEvent。如何通過輸入法服務將KeyEvents發送到對話框或微調菜單?

我使用的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

有沒有什麼辦法可以像使用輸入法中的硬鍵一樣發送鍵和控制設備?

更好地解釋什麼我想要做的事:

我有點writng輸入法,允許控制遠程設備。

我在客戶端(桌面pc上的一個Java應用程序)中寫入一個命令(例如「UP」),設備上的服務器使用sendBroadcast()發送意向信息,並在輸入法得到它,並調用keycodekeycode 它通常工作,但是當我去一個顯示對話框的應用程序時,keyDownUp方法不會將鍵盤事件發送到dialog,例如選擇是或否按鈕,但它始終控制Dialog後面的activty

Here我發現有人跟我同樣的問題...但沒有答案......

回答

1

首先,讓我解釋什麼,我都明白。

  • 你到一個應用程序
  • 您在活動打開一個對話框(例如去短信應用程序,長按一個線程)
  • 您按HOME鍵。
  • 轉到發送意圖的其他應用程序
  • IME獲取意圖,並寫下一些內容。

我不明白如何再次打開對話框的活動。

據我所知,當你按在softKeyboard的關鍵,IME的onKey(int primaryCode, int[] keyCodes)被調用,當你按下硬鍵輸入法被稱爲超:

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

你可以嘗試調用該方法,但我不知道模擬硬鍵是否可以修復它。我想這是一個焦點問題。您是否嘗試從getCurrentInputConnection()中獲取文本以查看其位置?

+0

我已編輯我的問題,試圖澄清我的問題是什麼。在你的示例中,當我在短信應用程序中打開對話框時,如果我發送命令DOWN爲DPAD_DOWN鍵,它不會使前景中的對話框滾動,但它會發送到後面的活動,消息列表,選擇長時間按下的消息之下的消息,使得無法關閉對話。我試圖調用onKeyDown和onKeyUp,但是它們不能在keyDownUp工作的地方工作。 – shutdown11 2010-04-11 14:50:14

+0

getCurrentInputConnection()總是返回一個帶有顯示對話框的活動的連接,而不是對話框。使用硬鍵代替時,可以在對話框對焦時滾動,所以我想知道如何模擬硬鍵。 – shutdown11 2010-04-11 14:58:20

+0

硬鍵肯定可以通過Instrumentation類來模擬,但需要根植設備。 – 2013-10-23 17:25:01

相關問題