我的目标是以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)
=>应用程序崩溃(也在电话呼叫期间)
看来我不能出于测试目的而使用仪器
superDispatchKeyEvent(KeyEvent)
但由于我不知道如何从目标运行的应用程序中定位特定的窗口(实际上,我的服务中没有窗口),所以我根本不知道如何使用它。
在别人问之前,我加了
android.permission.INJECT_事件
android.permission.modify_PHONE_状态
为了确保我所做的一切都是“允许的”。
然后。。。首先感谢您在此之前的阅读,现在:
-
你们中有些人知道我该怎么做
使用
来自服务的击键事件?
-
你们中的一些人知道如何对手机应用程序做同样的具体操作吗?
提前谢谢你的帮助。