【问题标题】:Android - How can a Service App dispatch KeyEvents to another Foreground AppAndroid - 服务应用程序如何将 KeyEvents 分派到另一个前台应用程序
【发布时间】:2014-12-09 01:53:51
【问题描述】:

我想开发一个将 KeyEvents 分派到前台应用程序的 Android 服务应用程序。

不知怎的,它会是这样的

我似乎无法找到一种方法,我只熟悉活动将 KeyEvents 分派给自己,如下所示:

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        if (event.getKeyCode() == KEYCODE_1) {
            // Do something
        } else if (event.getKeyCode() == KEYCODE_2) {
             // Do something
        }
     } else if (event.getAction() == KeyEvent.ACTION_UP) {
        if (event.getKeyCode() == KEYCODE_1) {
            // Do something
            return false;
        } else if (event.getKeyCode() == KEYCODE_2) {
            // Do something
            return true;
        } 
     }
     return super.dispatchKeyEvent(event);
 }

但不是与其他应用程序。

如果我错了,请纠正我,根据我到目前为止的研究,它说我需要将我的应用程序安装为系统应用程序并将我的keyevents直接发送到android系统,android系统将是一个谁会将其发送到 FOREGROUND 应用程序。它看起来更像这样:

如果这是正确的,任何人都可以帮助我如何做到这一点?或者,如果不是这样,请给我一个很好的解决方法来实现我的目标。谢谢!

PS:它将安装在有根设备上

【问题讨论】:

  • 您找到解决此问题的方法了吗?我想我有一个可行的解决方案。
  • 不,请帮帮我
  • 您好,您在服务应用程序中听过 keyevent 吗?我在这里有同样的问题,我需要从服务应用程序中监听 keyevent,如果你这样做了,请分享代码

标签: java android android-activity android-service keyevent


【解决方案1】:

您绝对可以仅使用 root 执行此操作,而无需将您的应用程序安装为系统应用程序。

实现这一点的方法是使用uiautomator framework。这是一个可用于 android 的强大框架,用于黑盒测试应用程序。

显然,您将使用此框架的目的与黑盒测试略有不同,但没关系。

UiDevice 具有 pressKeyCode(int keyCode) 方法,可以像这样使用它来将输入发送到任何应用程序碰巧在前台:

UiDevice dev = UiDevice.getInstance();
dev.pressKeyCode(KeyEvent.KEYCODE_1);

使用 uiautomator 的设置可能有点复杂,请参阅我的另一个 answer,我在其中更详细地描述了您需要做什么。

【讨论】:

    猜你喜欢
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    相关资源
    最近更新 更多