如果按下电源按钮3秒钟或在服务中单击3次,则捕获事件

时间:2016-04-23 06:56:26

标签: android android-service android-broadcastreceiver

我想在我的应用中捕获Power button press event,并且在后台运行的服务中也是如此。为此,我使用以下代码与广播接收器

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 个答案:

答案 0 :(得分:0)

没有办法做到这一点"没有做完全的混乱"原则上在android中,如果你需要这样做,你实际上做错了什么的可能性很高,因为服务文档中指定了#34;服务是一个应用程序组件,代表一个应用程序执行一个应用程序的愿望长时间运行操作,而不与用户交互"。服务组件仅用于长期执行的任务,这些任务不需要任何交互,也完全不依赖于除启动和停止之外的活动的特定操作。默认情况下,服务不包含您需要的输入方法,但无论如何只是回答您的问题。一种方法是将服务绑定到一个活动,从活动中获取服务引用,在服务中实现一个方法,然后在调用onKeyPress时从您的活动中执行该方法。