问题
I am trying to capture app switch key and home key on android 3.1 and 4.0 but it doesn't seem like its working.
here is what I am doing
@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);
}
My log.d statement is not printed. Is it possible to capture these 2 keys?
updated code with correct return statement
回答1:
Um.
Well, no, you can't.
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
回答2:
It can be achieved using reflection.
It is under class android.os.ServiceManager
having an aidl com.android.internal.statusbar.IStatusBarService
and it contains toggleRecentApps
method
And also try this method here
回答3:
The super.onKeyDown(keyCode, event) is missing, i think you should try this:
@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;
}
Doing the same using switch statement:
@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;
}
来源:https://stackoverflow.com/questions/8579818/how-to-capture-app-switch-key-using-onkeydown-in-android