我的目标是通过键事件来定位在后台服务的前台或后台运行的特定应用程序。
我尝试了很多解决方案,但还没有成功。
尝试的几个解决方案(全部来自后台运行的服务):
通过广播,我尝试定位第一个管理关键事件的应用程序(例如电话应用程序)
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);
=> 当我处于通话状态(摘机)时执行广播时,我的前台电话应用程序没有任何反应。事实上,我几乎确定这行不通,因为我无法专门针对手机应用程序。
With 仪器仪表,我尝试定位具有焦点的应用程序:
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
在我的清单中,以确保我所做的一切都是“允许的”。
然后...首先感谢您阅读到这里,现在:
- 你们中的一些人知道我怎样才能做到
确实针对特定应用程序
来自服务的击键事件?
- 你们中的一些人知道如何具体使用电话应用程序执行相同的操作吗?
在此先感谢您的帮助。