У меня есть сборка приложений под 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;
}
Он работает на устройствах до 2.x, но не работать над Hero с 2.1 update-1 и Nexus One с 2.2.
Есть ли что-то, чего мне не хватает в примере? Или кто-нибудь может указать, почему это не так t работает?
Я даже не нажимаю кнопку в logcat.
Используете ли вы onKeyUp()?
Используйте только onKeyDown() в Android 1.x или onBackPressed() в Android 2.x
При быстром поиске предлагается разместить обратный перехват во время onKeyUp (): 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);
}