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

在服务内部按下电源按钮3秒或单击3次时捕获事件

章高爽
2023-03-14

我想在我的应用程序中捕获电源按钮按下事件,也要在后台运行的服务中捕获该事件。为此,我对广播接收器使用了以下代码。

private static final String ACTION="android.intent.action.SCREEN_ON";
private BroadcastReceiver yourReceiver;

onReceive()方法:

final IntentFilter theFilter = new IntentFilter();
    theFilter.addAction(ACTION);
    this.yourReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            // Do whatever you need it to do when it receives the broadcast
            // Example show a Toast message...
            Log.d("button","button pressed");
            Toast.makeText(context,"pressed",Toast.LENGTH_LONG).show();
        }
    };

有了这个代码,我能够检测按钮的按下事件内接收器。

现在我想检测电源按钮是否被按下3秒或更长时间,然后我想在接收器内执行特定操作。为此,我找到了这个方法

    @Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_POWER) {
        // Do something here...
        return true;
    }
    return super.onKeyLongPress(keyCode, event);
}

但我发现这个方法只能在活动中运行,但我想在服务中调用它。

有没有办法检测电源按钮是否按下了3秒钟,或者我们可以在服务内部使用上述方法。

共有1个答案

郗鹏
2023-03-14

在Android系统中,如果“不把事情搞得一团糟”就无法做到这一点,如果您需要这样做,那么您实际做错事的可能性很高,因为正如服务文档中所指定的“服务是一个应用程序组件,表示应用程序希望在不与用户交互的情况下执行更长时间的运行操作”。服务组件是为了长时间执行不需要任何交互的任务,也不依赖于除启动和停止之外的活动的特定操作。默认情况下,该服务不包含您所需的输入方法,但只是为了回答您的问题。一种方法是将服务绑定到活动,从活动获取服务引用,在服务中实现一个方法,然后在活动中调用onKeyPress时从活动中执行该方法。

 类似资料:
  • 问题内容: 我创建了一个按钮,我想要这些: 当用户单击按钮时,它将保持按下状态约3秒钟。3秒钟后,按钮应再次看起来可按下。因此,用户必须等待3秒钟才能再次单击该按钮。我尝试了这些: 你有什么建议吗? 问题答案: 可能对您有帮助

  • 我想在单击JFrame标题栏的红色close按钮时调用一个方法。 我如何捕捉那个事件?

  • 我是开发Android应用程序的新手,我想做的是创建一个可以读取电源按钮按下时间的应用程序,以制作一个可访问性应用程序。 也许如果我能控制或计算屏幕打开和屏幕关闭事件,这可能会有所帮助。

  • 我是Android新手。我正在尝试制作一个应用程序,它将在后台运行,并检测三次快速按下电源按钮。我查阅了很多资料,但无法澄清我的困惑。谁能给我一些建议吗?蒂亚。

  • 我是新的Android和试图研发应用程序快速帮助。一旦用户双击电源按钮,我希望我的应用程序为两种情况直接呼叫救护车(屏幕打开/关闭)。我已经写了这段代码,但它不起作用。任何帮助将不胜感激。提前谢谢你。:) Android显示 我的电话服务。JAVA MyReceiver.java 主要活动。JAVA

  • 我正试图让JQuery在按下下一个按钮时自动单击该按钮。在互联网上,我发现应该是这样的(查看JQuery部分)。但由于某种原因,它不起作用。 它们必须在同一个代码中吗? 我尝试过的:JQuery: 表单中的按钮1 HTML: 表单中的按钮2 HTML: