4

我知道这个问题已经被问过很多次,答案总是“不,我们不能禁用主页按钮”。

我有一点不同的问题要问。

我编写了简单的代码,其中我的活动覆盖 onKeyDown() 并为所有按键返回 true。

从理论上讲,这意味着打开应用程序的任何人都被卡在那里并且无法选择退出应用程序。

当我在不同的设备上测试这个应用程序时,我做了以下观察:

  1. 在操作系统为 2.2.2 的摩托罗拉设备上,主页按钮被禁用。
  2. 在操作系统为 2.3.5 的 HTC 设备上,主页按钮被禁用。
  3. 在 OS 为 2.3.7 的 Sony 上,主页按钮被禁用。
  4. 在 OS 为 2.2.1 和 2.3.3 的三星上,主页按钮被禁用。
  5. 在 OS 为 2.3.6 和 4.0.4 的三星上,主页按钮保持启用状态。

这些观察似乎非常矛盾。

有谁知道,为什么不同的设备表现不同以及处理这种情况的最佳方法是什么。

据我了解,到目前为止,还没有供应商定制过 Android 操作系统。每个人都在上面放置 UI 层,但没有人触及内部。

4

3 回答 3

7

我知道这个问题已经被问过很多次,答案总是“不,我们不能禁用主页按钮”。

如果要处理 HOME 按钮,请实现主屏幕。

有谁知道为什么不同的设备表现不同

因为它们是不同的设备,并且供应商进行了更改。此外,在 4.0.4 的情况下,可能已经添加了额外的保护,以帮助防止恶意软件作者劫持 HOME 按钮而不是主屏幕。

处理这种情况的最佳方法是什么

如果要处理 HOME 按钮,请实现主屏幕。

每个人都在上面放置 UI 层,但没有人触及内部。

这是不正确的。几乎每个设备供应商都在不同程度上“触及了内部”。只要它们满足Play 商店的兼容性要求,Google 就会认为它们的更改是可以接受的。

于 2012-04-27T11:57:56.117 回答
6

您可能想尝试一下:

@Override
public void onBackPressed() {

}

@Override
protected void onUserLeaveHint() {
    super.onUserLeaveHint();
    ((ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE)).moveTaskToFront(getTaskId(), 0);
}

@Override
protected void onPause() {
    super.onPause();
    ((ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE)).moveTaskToFront(getTaskId(), 0);

}

需要的权限——将以下内容添加到清单中

<uses-permission android:name="android.permission.REORDER_TASKS" />
于 2015-10-04T22:19:33.173 回答
0

正如我在问题本身中提到的,对于 2.3.6 操作系统覆盖keypress()功能以下的设备运行良好。

问题从 2.3.6 开始。我不知道这些设备供应商做了什么,但keypress()功能在所有设备上的功能并不相同。

同样从 ICS 开始,谷歌已经完全停止使用keypress()功能。

那么我们该怎么做呢。

我看到它的方式,如果我们试图覆盖主页按钮,那么它是不可能的,但我们绝对可以听它。

在我们的 android 清单中,我们使用<category android:name="android.intent.category.HOME" />过滤器,这使得我们的活动成为家庭替换屏幕。现在,当您按下主页按钮时,内容解析器弹出窗口将始终出现并询问哪个应用程序,即默认启动器或您的应用程序应该响应主页按钮单击。您总是可以在那里选择您的应用程序。

但这不会覆盖或禁用主页按钮。每当您按下主页按钮时,相同的事情将一次又一次地重复,直到您将应用程序设为默认,通过单击内容解析器弹出窗口中给出的用作默认复选框。

现在,一旦您选择您的应用程序作为默认主页,新闻将始终启动您的应用程序。

完成……不。出现的问题是,如果您移出应用程序,主页按钮仍会启动您的应用程序。工作完成后如何摆脱它。

我们要做的是在关闭或调用我们的活动的完成()时,在此之前我们应该使用以下方法将包设置设置为默认值:

paramPackageManager1.setComponentEnabledSetting(localComponentName2, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 1);

这会将主页按钮与您的活动取消关联。

于 2012-05-10T09:18:54.040 回答