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