2010-08-24 6 views
7

Ich habe eine Anwendung gegen Android 2.1 und ich möchte die Zurück-Schaltfläche überschreiben.Android - onBackPressed() funktioniert nicht

ich das Beispiel hier verfolgt haben:

http://android-developers.blogspot.com/2009_12_01_archive.html

Und mein Code wie folgt:


@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; 
    } 

Es auf Pre-2.x-Geräten funktioniert, aber doesn arbeite nicht an einem Hero mit 2.1 Update-1 und einem Nexus One mit 2.2.

Gibt es etwas, das mir im Beispiel fehlt? Oder kann jemand darauf hinweisen, warum es nicht funktioniert?

Ich bekomme nicht einmal die Taste im Logcat gedrückt.

Antwort

11

Verwenden Sie onKeyUp()?

Verwendung nur onKeyDown() in Android 1.x oder onBackPressed() in Android 2.x

4

Einige schnelle Suche schlägt vor, dass Sie den Back-Abschnitt während OnKeyUp() platzieren: http://developer.android.com/sdk/android-2.0.html. Es ist einen Versuch wert. Der folgende Code ist direkt von der Website:

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); 
} 
+0

Dank, die jetzt auf 2.x-Geräten funktionieren, aber es wird nicht auf meinem 1.6-Gerät wie das obige API läuft nur von API verfügbar Level 5 weiter –

0

Sie sollten Eltern Bauer nennen.

In onKeyDown() Methodenaufruf

super.onKeyDown(); 

und in onBackPressed()

super.onBackPressed();