JT.*_*JT. 41
现有的答案并没有完全回答这个问题,并且遗漏了足够的细节,如果没有更多的调查它们将无法运作.我会分享我学到的解决这个问题的方法.
首先,您需要向清单文件添加以下权限:
<uses-permission android:name="android.permission.PREVENT_POWER_KEY" />
Run Code Online (Sandbox Code Playgroud)
要处理短期和长期印刷机,请在活动类中添加以下覆盖:
@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);
}
Run Code Online (Sandbox Code Playgroud)
注意:值得注意的是onKeyDown()会在onKeyLongPress执行之前多次触发,因此您可能希望触发onKeyUp()或其他逻辑,以防止在用户真正按住它时对一系列onKeyDown()调用进行操作.
我认为下一部分仅适用于Cyanogenmod. 如果 PREVENT_POWER_KEY 常量未定义,那么您不应该需要它.
要开始拦截电源键,您需要在活动中设置以下标志:
getWindow().addFlags(WindowManager.LayoutParams.PREVENT_POWER_KEY);
Run Code Online (Sandbox Code Playgroud)
要停止拦截电源键(允许标准功能):
getWindow().clearFlags(WindowManager.LayoutParams.PREVENT_POWER_KEY);
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以在程序中反复在两种模式之间来回切换.
解:
@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);
}
Run Code Online (Sandbox Code Playgroud)
在您的活动中添加:
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);
}
Run Code Online (Sandbox Code Playgroud)
虽然……这种钥匙有些特殊……不确定它是否会给您带来问题。
| 归档时间: |
|
| 查看次数: |
67417 次 |
| 最近记录: |