我正在尝试在Android 3.1和4.0上捕获应用程序切换键和主页键,但它似乎不起作用。
这就是我正在做的事情
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (KeyCode == KeyEvent.KEYCODE.KEYCODE_APP_SWITCH && event.getRepeatCount() == 0)
{
Log.d ("onkeydown","app switch key");
}
else if (KeyCode == KeyEvent.KEYCODE.KEYCODE_HOME && event.getRepeatCount() == 0)
{
Log.d ("onkeydown","home key");
}
//EDIT:
return super.onKeyDown(keyCode, event);
}
我的log.d语句未打印。是否可以捕获这两个键?
使用正确的return语句更新代码
答案 0 :(得分:2)
庵。
嗯,不,你不能。
public static final int KEYCODE_HOME
自:API Level 1
密钥代码常量:Home键。
此密钥由框架处理,永远不会传递给应用程序。
http://developer.android.com/reference/android/view/KeyEvent.html
答案 1 :(得分:1)
可以使用反射来实现。
它位于android.os.ServiceManager
类,有一个援助com.android.internal.statusbar.IStatusBarService
,它包含toggleRecentApps
方法
并尝试此method here
答案 2 :(得分:0)
缺少 super.onKeyDown(keyCode,event),我想你应该试试这个:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
super.onKeyDown(keyCode, event);
if (KeyCode == KeyEvent.KEYCODE.KEYCODE_APP_SWITCH && event.getRepeatCount() == 0)
{
Log.d ("onkeydown","app switch key");
}
else if (KeyCode == KeyEvent.KEYCODE.KEYCODE_HOME && event.getRepeatCount() == 0)
{
Log.d ("onkeydown","home key");
}
return true;
}
使用switch语句执行相同的操作:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
super.onKeyDown(keyCode, event);
switch(keyCode)
{
case KeyEvent.KEYCODE_CAMERA:
Toast.makeText(ListViewActivity.this, "Pressed Camera Button", Toast.LENGTH_SHORT).show();
return true;
case KeyEvent.KEYCODE_1:
Toast.makeText(ListViewActivity.this, "Pressed 1", Toast.LENGTH_SHORT).show();
return true;
case KeyEvent.KEYCODE_HOME:
Toast.makeText(ListViewActivity.this, "Pressed Home Button", Toast.LENGTH_SHORT).show();
return true;
case KeyEvent.KEYCODE_BACK:
Toast.makeText(ListViewActivity.this, "Pressed Back Button", Toast.LENGTH_SHORT).show();
finish();
return true;
}
return false;
}