我有一个针对Android 2.1的应用程序构建,我想覆盖后退按钮。
我已按照此处的示例:
http://android-developers.blogspot.com/2009_12_01_archive.html
我的代码如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
Log.d("CDA", "onKeyDown Called");
onBackPressed();
}
return true;
}
@Override
public void onBackPressed() {
Log.d("CDA", "onBackPressed Called");
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
return;
}
适用于pre 2.x设备,但不适用于2.1更新-1的Hero和2.2的Nexus One。
示例中是否有我遗漏的东西?或者任何人都可以指出它为什么不起作用?
我甚至没有在logcat中按下按钮。
答案 0 :(得分:11)
您使用的是 onKeyUp()吗?
在Android 1.x中仅使用 onKeyDown()或在Android 2.x中使用 onBackPressed()
答案 1 :(得分:4)
一些快速搜索建议您在onKeyUp()期间放置Back拦截:http://developer.android.com/sdk/android-2.0.html。值得一试。 以下代码直接来自网站:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
event.startTracking();
return true;
}
return super.onKeyDown(keyCode, event);
}
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
&& !event.isCanceled()) {
// *** DO ACTION HERE ***
return true;
}
return super.onKeyUp(keyCode, event);
}
答案 2 :(得分:0)
你应该调用父构造函数。
在onKeyDown()
方法调用中
super.onKeyDown();
并在onBackPressed()
super.onBackPressed();