Android – onBackPressed () не работает

У меня есть приложение для 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, но не работает на Hero с 2.1 update-1 и Nexus One с 2.2.

Есть что-то, что мне не хватает на примере? Или кто-нибудь может указать, почему он не работает?

Я даже не нажимаю кнопку в логарифме.

Вы используете 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); } 

Вы должны вызвать родительские конструкторы.

В onKeyDown() метода onKeyDown()

 super.onKeyDown(); 

и в onBackPressed()

 super.onBackPressed(); 
Давайте будем гением компьютера.