2010-08-24 68 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();