0

我在 android 中有一个应用程序,其中包括一个应用程序主页。我覆盖了硬件主页按钮以返回 API 级别 10 或更低的应用程序主页。

我的应用程序在 Android 版本 3.0 和 4.0 上运行良好。问题是覆盖主页按钮。我发现了一个讨论(在 Android ICS (4.0) 中禁用主页按钮),其中包括一种以某种方式实现主屏幕的方法。这是@Chalaman 建议的。

我还没明白重点。有没有人可以通过提供一些代码来帮助我?

当我们使用:

<intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.HOME" />
   <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

在清单文件中,当我们单击主页按钮时会弹出一个对话框。它包括家庭电话页面图标和应用程序图标。我们可以做出选择。如果我们选择应用程序图标,我们将停留在应用程序中。问题是我们也停留在同一个活动中。我怎样才能去另一个活动(我的应用程序的主页)?

我们可以在 API 级别 10 或更低级别使用它:

@Override
    public void onAttachedToWindow() {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB)
            this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
        super.onAttachedToWindow();
    }


    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_HOME: 
        loadStartPage();
            break; 

        }
        return super.onKeyDown(keyCode, event);
    }

    private void loadStartPage() {
        Intent intent = new Intent(getApplicationContext(), StartActivity.class);
        intent.putExtra("user", user);
        intent.putExtra("user_id", user_id);
        intent.putExtra("server", server);
        intent.putExtra("password", password);
        main_activity.startActivity(intent);
    }

如何在 API 级别 11 或更高级别加载起始页?

4

3 回答 3

2

答案很简单:不要这样做

用户希望他们的应用程序在整个 Android 平台上保持一致。我无法想象在这种情况下您可以证明覆盖主页按钮是合理的。


编辑:

需要明确的是,有些应用程序似乎覆盖了主页按钮(即车载模式应用程序,除非您单击“退出”按钮,否则它不允许您退出应用程序)。诸如此类的应用程序实际上并没有明确覆盖“主页按钮”。你可以在这里阅读更多关于它的信息。

于 2012-06-08T01:08:48.363 回答
1

android 主屏幕只是一个应用程序。它由按下 home 键时发出的明确定义的广播意图启动。

简而言之,您实现了一个 android 应用程序,该应用程序侦听与股票 android 主屏幕应用程序侦听的相同事件。当用户按下主页时,他们将看到允许他们从股票主屏幕应用程序(我们的应用程序)中进行选择的选择器。这是意图过滤器的样子,

<intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.HOME" />
   <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

我意识到这可能不是你想要的。但是,没有办法完全覆盖 home 键。这是故意的,因为它可以防止恶意应用程序将您锁定在主屏幕之外。主页按钮是一种保证可以工作的“让我离开这里”按钮。

您的用户可以将您的应用标记为默认处理家庭广播,但这可能也不是您想要的,因为从那时起他们希望能够进入股票主屏幕,除非他们清除默认或卸载您的应用。

阻止用户访问主页按钮是一件非常讨厌的事情。你确定那是你想要的吗?

于 2012-06-08T00:34:45.787 回答
0

覆盖 onKeydown 无法解决您的问题..当您按下主页按钮时,活动调用 onPause() ..所以将您的方法放在 onPause() 中..我想它会起作用..

protected void onPause() {
super.onPause();
 loadStartPage();
}
private void loadStartPage() {
    Intent intent = new Intent(getApplicationContext(), StartActivity.class);
    intent.putExtra("user", user);
    intent.putExtra("user_id", user_id);
    intent.putExtra("server", server);
    intent.putExtra("password", password);
    main_activity.startActivity(intent);
}
于 2013-05-22T13:04:59.570 回答