如何在android中覆盖双击电源按钮或音量按钮?

Posted

技术标签:

【中文标题】如何在android中覆盖双击电源按钮或音量按钮?【英文标题】:How to override double click of power button or volume button in android? 【发布时间】:2015-08-15 22:40:36 【问题描述】:

我正在尝试创建一个简单的手电筒应用程序

    我想要的是,每当用户按 KEYCODE_VOLUME_DOWN 2 次或单次时,我想打开手电筒,或者每当用户按 KEYCODE_POWER 2 次时

    可以在任何地方完成,即我的应用是否打开,或者屏幕是否关闭?

出于测试目的,我只是显示 Toast 通知,但我无法覆盖 KEYCODE_POWER ,如何覆盖 KEYCODE_POWER ?

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
    switch(keyCode)
        case KeyEvent.KEYCODE_POWER:
            Toast.makeText(this,"Power Down pressed", Toast.LENGTH_SHORT).show();
            textview1.setText("Power Button Pressed");
            return true;
        case KeyEvent.KEYCODE_VOLUME_UP:
            //event.startTracking();
            Toast.makeText(this, "Volume Up Pressed", Toast.LENGTH_SHORT).show();
            return true;
        case KeyEvent.KEYCODE_VOLUME_DOWN:
            Toast.makeText(this,"Volume Down pressed", Toast.LENGTH_SHORT).show();
            return true;
    
    return super.onKeyDown(keyCode, event);
    

【问题讨论】:

看看这篇文章可能会得到帮助click here @Clairvoyant 很好,我认为这是一种技巧,无论如何我会尝试从那个链接中找出一些东西,这很有帮助,你能告诉我我该怎么做吗无论我的应用程序是打开还是关闭,都意味着在任何屏幕上,如果用户按音量增大或减小 2 次或 3 次,应该做些什么? 制作整数变量并在 keydown 方法中为所需条件递增它们并检查值是否大于等于 2 如果为真则按下按钮两次然后将变量值再次设为零它将再次增加到 2 @Clairvoyant 好的,我明白了,谢谢,但我的问题是如何在任何屏幕上执行您所写的上述操作,我的意思是用户不应该运行我的应用程序,比如像这个应用程序这样的后台服务play.google.com/store/apps/… 你无法处理服务中的关键事件 【参考方案1】:

从任何地方访问按键,即使手机被锁定,但在屏幕关闭时不能。

创建一个类 Myaccessibility 然后扩展 android.accessibilityservice.AccessibilityService 然后覆盖该类中的 onKeyEvent。

在 Manifest 中注册服务 有关如何创建无障碍服务的更多信息

https://developer.android.com/guide/topics/ui/accessibility/service

【讨论】:

以上是关于如何在android中覆盖双击电源按钮或音量按钮?的主要内容,如果未能解决你的问题,请参考以下文章

qml 苹果关机按钮

双击电源按钮时闪光灯应打开

Android - 如何防止按下音量或相机键时手机屏幕打开?

如何在Android中锁定屏幕时长按电源按钮启用GPS?

如何以编程方式在android中检测设备电源按钮按下两次

收听后台服务中的音量按钮?