2010-08-24 71 views
7

我有一個針對Android 2.1的應用程序構建,我想覆蓋後退按鈕。Android - onBackPressed()不起作用

我按照這裏的例子:

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設備,但沒有按在2.1版本更新-1和Nexus One 2.2版本上工作。

有沒有什麼我從示例中缺少的東西?或者任何人都可以指出爲什麼它不起作用?

我甚至沒有按下logcat按鈕。

回答

11

是否使用的onkeyup()

使用只是的onkeydown() Android中的1.x或onBackPressed()在安卓2.X

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

感謝,現在在2.x設備的工作原理,但它不會我的1.6設備作爲上述API上運行只能從API 5級以上 – 2010-08-24 16:29:39

0

你應該調用父構造函數。

onKeyDown()方法調用

super.onKeyDown(); 

onBackPressed()

super.onBackPressed();