不能禁用特定的Android设备上的主页button

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

我有一个不同的查询要求。

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

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

当我在不同的设备上testing这个应用程序,我提出以下意见:

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

这些意见似乎很矛盾。

有没有人有任何想法,为什么不同的设备行为不同,什么是处理这种情况的最佳方式。

根据我的理解,直到现在没有任何厂商定制Android操作系统。 每个人都在其上放置UI层,但没有人触及内部。

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

如果你想处理HOMEbutton,实现一个主屏幕。

有没有人有任何想法,为什么不同的设备行为不同

因为他们是不同的设备,供应商做出了改变。 此外,在4.0.4的情况下,可能已经添加了额外的保护措施,以帮助防止恶意软件作者劫持主页button而不是主屏幕。

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

如果你想处理HOMEbutton,实现一个主屏幕。

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

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

你可能想试试这个:

@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" /> 

正如我的问题本身在2.3.6以下的设备中提到的,重写keypress()函数运行良好。

问题从2.3.6开始。 我不知道这些设备供应商做了什么,但是keypress()函数在所有设备上的function都不一样。

同样从ICS开始,google已经停止使用一次keypress()函数。

那么我们该怎么做。

我看到它的方式,如果我们试图重载主页button然后它不可能,但我们肯定可以听取它。

在我们的Android清单中,我们使用<category android:name="android.intent.category.HOME" />filter,这使得我们的活动成为家庭替代屏幕。 现在,当你按回家的button时,内容parsing器popup将始终提出并询问哪个应用程序,即默认启动程序或您的应用程序应回应主页button单击。 你可以随时在那里select你的应用程序

但是这不会覆盖或禁用主页button。 每当你按主页button,同样的事情会一再重复,直到你使你的应用程序默认,通过点击内容parsing器popup的默认使用checkbox。

现在,一旦你select你的应用程序作为默认主页按下将始终启动您的应用程序。

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

我们要做的就是在我们的活动中closures或调用finish()之前,我们应该使用以下方法将包设置设置为默认值:

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

这将关联您的活动主页button。