在Android设备上,唯一的按钮是音量按钮和电源按钮,我想让应用程序对电源按钮(长按和短按)做出反应。这是怎么做的?
发布于 2010-09-15 15:29:02
解决方案:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
Intent i = new Intent(this, ActivitySetupMenu.class);
startActivity(i);
return true;
}
return super.dispatchKeyEvent(event);
}发布于 2012-04-28 23:57:56
现有的答案没有完全回答这个问题,并且遗漏了足够多的细节,如果没有更多的调查,它们就不会起作用。我将分享我在解决这个问题上学到的东西。
首先,您需要向清单文件添加以下权限:
<uses-permission android:name="android.permission.PREVENT_POWER_KEY" />要处理短按和长按,请将以下覆盖添加到activity类中:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_POWER) {
// Do something here...
event.startTracking(); // Needed to track long presses
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_POWER) {
// Do something here...
return true;
}
return super.onKeyLongPress(keyCode, event);
}注意:值得注意的是,onKeyDown()会在onKeyLongPress之前触发多次,因此您可能希望在onKeyUp()上触发,或者使用其他逻辑来防止在用户真正按住它时对一系列onKeyDown()调用执行操作。
我认为下一部分仅适用于Cyanogenmod。如果PREVENT_POWER_KEY常量是未定义的,那么您不应该需要它。
要开始截取电源键,您需要在活动中设置以下标志:
getWindow().addFlags(WindowManager.LayoutParams.PREVENT_POWER_KEY);要停止拦截电源键(允许标准功能),请执行以下操作:
getWindow().clearFlags(WindowManager.LayoutParams.PREVENT_POWER_KEY);如果您愿意,您可以在程序中重复地来回切换这两种模式。
发布于 2010-09-14 02:08:28
在您的活动中添加:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
// do what you want with the power button
return true;
}
return super.onKeyDown(keyCode, event);
}不过..。这种钥匙不知何故很特别。不确定它是否会给你带来问题。
https://stackoverflow.com/questions/3703071
复制相似问题