当我的应用程序处于后台时,在Android上捕获硬件按钮

时间:2014-03-18 09:16:45

标签: android button broadcastreceiver

当用户按下其中一个硬件按钮时,我想执行一些代码(这并不重要,其中哪一个,但Power是可取的)。

我想捕捉事件,甚至应用程序最小化到背景和设备正在睡觉。 (主要任务是处理事件,当设备在口袋内并且用户连续按下按钮三次但不取出设备时)。

这可能吗?如果电源按钮不可用,那么音量或主页按钮可能是可能的吗?我该怎么办?

我尝试了很多方法,但唯一有效的是:

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, filter);

但由于实际按键按下和接收器代码执行之间存在巨大延迟,我无法处理三重按键。

提前致谢。

2 个答案:

答案 0 :(得分:2)

您无法覆盖应用程序中的电源按钮。但是当您按下电源按钮时,屏幕会打开/关闭。所以你可以使用广播接收器检测到这一点 在manifest xml中,注册recevier

<receiver android:name=".MyBroadCastReciever">
<intent-filter>
    <action android:name="android.intent.action.SCREEN_OFF"/>
    <action android:name="android.intent.action.SCREEN_ON"/>
</intent-filter>
</receiver>

和广播接收器类

public class MyBroadCastReciever extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
        //Take count of the screen off position
    } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
        //Take count of the screen on position
    }
}
}

编辑:

我发现如果您在清单中注册,ACTION_SCREEN_ON和SCREEN_OFF将不会触发。 您必须在代码中注册,但它只会在应用程序运行时检测到。所以你必须创建一直运行的服务并在服务中注册一个接收器。

答案 1 :(得分:1)

我不认为Android会允许这样做。前景中的应用程序在逻辑上应该在所有方面获得优先权。做你的建议就像拦截另一个应用的行为(他们可能也想使用硬件按钮)。我认为这必须违反T&amp; C.