我的目标是以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