从Android中的任何片段捕获MainActivity中的键盘按下事件

时间:2018-07-25 15:58:18

标签: android android-softkeyboard android-textwatcher android-touch-event

由于我的应用程序中存在安全限制,如果用户在2分钟内没有任何活动,则会注销用户。

在我的MainActivity中,我覆盖了 dispatchTouchEvent ,每次用户与该应用进行交互时都会调用它。

但是,如果用户在应用中输入内容,则不会调用 dispatchKeyEvent 。因此,如果用户输入的时间超过2分钟,则该应用会将其踢出。

如何在不添加TextWathcer的情况下捕获应用程序中的任何按键事件?

1 个答案:

答案 0 :(得分:1)

dispatchKeyEvent接受一个 KeyEvent 对象作为参数。和 From Android documentation:

  

注意:使用KeyEvent类和   相关的API,您应该期望此类键盘事件只会出现   通过硬件键盘。您永远不要依赖接收密钥   软输入法(屏幕键盘)上任何键的事件。

from here:

  

由于软输入法可以使用多种创新的输入方式   文字,无法保证软键盘上的任何按键都会   生成关键事件:这由IME自行决定,然后   不鼓励发送此类事件。你永远不要依靠   接收软输入法上任何键的KeyEvent。尤其是,   默认的软件键盘将永远不会将任何按键事件发送给任何   定位Jelly Bean或更高版本的应用程序,并且只会发送事件   对于某些按删除和返回键的应用程序   以冰淇淋三明治或更早的时间为目标。

要从屏幕键盘上调度按键事件,必须将textWatcher添加到您的editText中。

例如:

myEditText.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                }

                @Override
                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                }

                @Override
                public void afterTextChanged(Editable editable) {

                }
            });