我的目標是以keyevent爲目標,從後臺服務運行在前臺或後臺的特定應用程序。如何使用KeyEvent定位正在運行的應用程序?
我嘗試了很多解決方案,但還沒有設法做到這一點。
的幾個解決方案試過(全部來自一個後臺運行的服務):
利用廣播,我試着爲目標的第一個應用程序(例如電話應用程序),將管理的關鍵事件
KeyEvent lKey1Up = new KeyEvent(KeyEvent.ACTION_UP,KeyEvent.KEYCODE_ENDCALL);
KeyEvent lKey1Dwn = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_ENDCALL);
Intent lKey1UpIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
Intent lKey1DwnIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
lKey1UpIntent.putExtra(Intent.EXTRA_KEY_EVENT, lKey1Up);
lKey1DwnIntent.putExtra(Intent.EXTRA_KEY_EVENT, lKey1Dwn);
sendOrderedBroadcast(lKey1UpIntent, null);
sendOrderedBroadcast(lKey1DwnIntent, null);
=>當我處於通話狀態(OFFHOOK)時執行廣播時,前臺電話應用程序沒有任何反應。事實上,我幾乎可以肯定,這是行不通的,因爲我無法專門定位手機應用程序。
隨着儀表,我試圖靶向具有焦點的應用:
Instrumentation lInst = new Instrumentation();
KeyEvent lKey1Up = new KeyEvent(KeyEvent.ACTION_UP,KeyEvent.KEYCODE_1);
KeyEvent lKey1Dwn = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_1);
lInst.sendKeySync(lKey1Up);
lInst.sendKeySync(lKey1Dwn);
還與於單個呼叫嘗試:
lInst.sendKeyDownUpSync(KeyEvent.KEYCODE_1)
=>應用崩潰(在通話期間) 看起來像我不能使用Instrumentation出於測試目的
最後,我想過用
superDispatchKeyEvent(KeyEvent)
但因爲我不知道如何定位從目標運行的應用程序特定的窗口(和我沒有在我的服務的確如此),我根本不知道如何使用它。
而且有人問之前,我添加了
android.permission.INJECT_EVENTS
android.permission.MODIY_PHONE_STATE
在我的清單,以確保所有我做的被允許」。
然後...首先感謝閱讀到這裏,現在:
- 一些你知道我可以設法 做目標從一個服務 擊鍵事件的特定應用程序?
- 你們中的一些人知道如何針對電話應用程序做相同的處理?
在此先感謝您的幫助。
你已經找到了解決這個? – steven0529 2014-12-09 01:54:46
2年前我停止了對iOs的工作......並且從來沒有找到一個「乾淨的方式來做到這一點」。但是我確信這已經演變了很多,你現在可能會發現新的技巧 – Marvin 2014-12-09 16:43:15