7

我有一个针对 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 之前的设备,但不适用于带有 2.1 update-1 的 Hero 和带有 2.2 的 Nexus One。

示例中是否缺少我的东西?或者任何人都可以指出为什么它不起作用?

我什至没有在 logcat 中按下按钮。

4

3 回答 3

11

你在使用onKeyUp()吗?

在 Android 1.x 中仅使用onKeyDown()或在 Android 2.x 中使用onBackPressed()

于 2010-08-24T16:20:49.787 回答
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);
}
于 2010-08-24T16:11:24.367 回答
0

您应该调用父构造函数。

onKeyDown()方法调用中

super.onKeyDown();

并且在onBackPressed()

super.onBackPressed();
于 2012-06-18T18:11:03.240 回答