当前位置: 首页 > 知识库问答 >
问题:

关闭屏幕的AccessibilityService OnKeyEvent

南门英飙
2023-03-14

我正在使用AccessibilityService OnKeyEvent捕获HeadSetHook。这是这样的,我可以触发一个事件上键,下键,即使我的应用程序它不在焦点。

但是,一旦屏幕熄灭,它就不起作用了。这有什么办法吗?

共有1个答案

袁俊弼
2023-03-14

当屏幕关闭时,accessibilityservice将不工作。因此,为了实现在关机时捕获keyevent的功能,您应该使用其他替代方案。

如果您只想捕获headsethook,则可以使用mediabuttonintentreceiver而不是accessibilityservice:注册一个broadcastreceiver以接收action_media_button意图,因此也可以在屏幕关闭时在后台捕获keycode_media_*keycode_headsethook

AndroidManifest.xml

<receiver android:name="com.exmaple.MediaButtonReceiver"><intent-filter >
    <action android:name="android.intent.action.MEDIA_BUTTON"></action>  
</intent-filter></receiver>

MediabuttonReceiver.java

...
public void onReceive(Context context, Intent intent) {
    ...
    KeyEvent keyEvent = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
    if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
        int keyCode = keyEvent.getKeyCode();
        switch (keyCode) {
        case KeyEvent.KEYCODE_HEADSETHOOK:
            ...
        }
    }
    ...
}

如果不希望其他应用程序捕获headsethook,则应使用audiomanager注册它:

...
AudioManager mAudioManager =(AudioManager)getSystemService(Context.AUDIO_SERVICE);
ComponentName  mbCN = new ComponentName(getPackageName(),MediaButtonIntentReceiver.class.getName());  
mAudioManager.registerMediaButtonEventReceiver(mbCN);
... 
//mAudioManager.unregisterMediaButtonEventReceiver(mbCN);
...  

注意:大多数音乐播放器应用程序也使用mediabutton,当它们注册mediabutton接收器时,您的应用程序将失去audiomanager的焦点,所以您可能应该使用audiofocuschangelistener来监听焦点的更改并重新注册。

如果您还想在后台捕获其他键。据我所知,root是一个很好的解决方案。您可以使用getevent命令捕获输入设备的所有日志流。然后触发所需密钥日志。

 类似资料:
  • 关闭屏幕盖时   设定关闭屏幕盖时的动作。 标准 关闭屏幕盖时,显示专用的画面。 进入睡眠模式 让主机进入睡眠模式。 提示 若主机处于锁定状态(POWER(电源)/HOLD(固定)按钮滑至下方),即使已选择[进入睡眠模式],主机仍不会在关闭屏幕盖时进入睡眠模式。 屏幕盖关闭时显示的画面 在屏幕盖关闭时按下L/R按钮,即可变更显示的内容。 同时按下L/R按钮 每次同时按下L/R按钮,可交替显示月历/

  • 首先,我阅读了几十个SO问题,并阅读了Alex Lockwood撰写的关于与片段事务相关的问题的精彩文章:https://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html-tl;DR我做了功课 但我在任何地方都没有发现问题,此时屏幕关闭,并且我们正在尝试提交片段事务-在我的例子中显示。

  • 在我的应用程序中,我有多个.fxml文件。当我在应用程序中设置屏幕时,我还设置了<code>SetOnCloseRequest()管理银行屏幕后不久,应用程序并没有停止运行。所以在那之后我什么都做不了,因为我没有GUI。是否有人知道如何确保屏幕不会关闭? 下面是我的带有< code>SetOnCloseRequest()方法的主类: 这是我的类:

  • 想改进这个问题吗 通过编辑此帖子,更新问题,使其只关注一个问题。 我想创建一个应用程序,使用户能够< code >捕捉屏幕他们的Android设备。就像我们在电脑中使用的任何屏幕录制软件一样,请帮助我 编辑 : 1 这里

  • 我正在开发一个应用程序,我想在屏幕上显示计时器,并用它做动作。我需要当计时器停止时,玩家会输掉比赛。这部分我可以单独做,但我不知道如何做的部分是如何在屏幕上显示计时器,并使剩余的时间可见。 我希望你能帮助我,谢谢你的帮助!

  • 我的有问题,当我在手机上启动应用程序时,它会显示约0.5秒的白色屏幕。扩展了,在中,我声明为启动器,肖像模式为。 代码: XML: