当用户按下其中一个硬件按钮时,我想执行一些代码(这并不重要,其中哪一个,但Power是可取的)。
我想捕捉事件,甚至应用程序最小化到背景和设备正在睡觉。 (主要任务是处理事件,当设备在口袋内并且用户连续按下按钮三次但不取出设备时)。
这可能吗?如果电源按钮不可用,那么音量或主页按钮可能是可能的吗?我该怎么办?
我尝试了很多方法,但唯一有效的是:
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, filter);
但由于实际按键按下和接收器代码执行之间存在巨大延迟,我无法处理三重按键。
提前致谢。
答案 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.