2

我正在尝试在 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 语句没有打印出来。是否可以捕获这两个键?

使用正确的返回语句更新代码

4

3 回答 3

2

嗯。

嗯,不,你不能。

公共静态最终 int KEYCODE_HOME

自:API 级别 1

键码常量:Home键。

此密钥由框架处理,永远不会传递给应用程序。

http://developer.android.com/reference/android/view/KeyEvent.html

于 2011-12-20T18:06:56.710 回答
1

可以使用反射来实现。

它在android.os.ServiceManager具有辅助功能的类下,com.android.internal.statusbar.IStatusBarService并且包含toggleRecentApps方法

也可以在这里试试这个方法

于 2015-08-07T07:49:39.603 回答
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;
    }
于 2011-12-20T18:13:32.840 回答