如何在Android中使用onKeyDown捕获应用程序切换键?

How to capture app switch key using onKeyDown in Android?

我正在尝试在android 3.1和4.0上捕获应用程序切换键和主键,但似乎不起作用。

这是我在做什么

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@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语句未打印。 是否可以捕获这两个键?

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


好吧,不,你不能。

public static final int KEYCODE_HOME

Since: API Level 1

Key code constant: Home key.

This key is handled by the framework and is never delivered to applications.

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


可以使用反射来实现。

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

也可以在这里尝试这种方法


super.onKeyDown(keyCode,event)丢失了,我认为您应该尝试以下操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@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语句执行相同的操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@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;
    }