当应用程序在后台时,侦听dispatchKeyEvent

时间:2017-08-18 13:15:12

标签: android

我正在编写的应用程序必须从我的应用程序外部侦听物理硬件按钮单击事件。我的设备有一个专用的SOS按钮,我正在尝试使用它。

到目前为止,我可以在我的应用中使用 dispatchKeyEvent ,但这不好,当我的应用处于背景时,我需要找到一种方法来监听此关键事件

@Override
public boolean dispatchKeyEvent(KeyEvent event) {

    // sos button code = 80;
    if(event.getKeyCode() == 80){
        // SOS button clicked
        // run function here.
        Toast.makeText(this, "SoS button clicked.", Toast.LENGTH_SHORT).show();
    }
    return super.dispatchKeyEvent(event);
}

任何帮助将不胜感激!感谢。

1 个答案:

答案 0 :(得分:3)

我还没有评论,因为我没有50个声誉,所以在这里为添加的字符串道歉。所以我也在努力,我可以分享我所做的。

首先,我们查看了/ system / usr / keylayout文件夹中的Generic.kl和其他keylayout文件。我们可以轻松地更改此处任何按钮的行为,但当然您只能使用CAMERA,VOLUME_UP,SEARCH等主要系统命令。

因此,您无法直接从此处运行应用。

所以我们转向你可以通过破解主ROM上的boot.img找到的init.rc文件。这里有一个很好的主题:

Running app from button press

所以我们在/ system / bin文件夹中添加了一个脚本。我通过在shell中手动运行来检查脚本运行。我还测试了一个基本的echo脚本。

然后我们在init.rc文件中添加了该服务,但它不起作用。事实上,我们试图改变听取的按钮,但没有任何效果。非常令人沮丧,因为Android在这里写的服务完全一样。我们确保删除了对.kl文件中按钮的所有引用,以防它们覆盖init.rc服务。

因此init.rc文件中的服务必须是罪魁祸首,但不确定原因。所以仍然坚持,非常接近,但是距离很远!!