我知道这个问题已被多次询问,答案总是“我们不能禁用主页按钮”。
我有一个不同的询问要求。
我编写了简单的代码,其中我的活动会覆盖onKeyDown()并为所有按键返回true。
理论上,这意味着无论谁打开应用程序都会被卡在那里,并且无法退出应用程序。
当我在不同设备上测试此应用程序时,我做了以下观察:
这些观察似乎非常矛盾。
是否有任何人有任何想法,为什么不同的设备表现不同,以及处理这种情况的最佳方式是什么。
据我所知,到目前为止,没有一家供应商定制过Android操作系统。每个人都在它上面放置UI层,但没有人触及内部。
答案 0 :(得分:7)
我知道这个问题已被多次询问,答案总是“我们不能禁用主页按钮”。
如果您想处理HOME按钮,请实现主屏幕。
有没有人知道,为什么不同的设备表现不同
因为它们是不同的设备,并且供应商进行了更改。此外,在4.0.4的情况下,可能还添加了其他保护措施,以帮助防止恶意软件作者在不作为主屏幕的情况下劫持HOME按钮。
处理此类情景的最佳方法是什么
如果您想处理HOME按钮,请实现主屏幕。
每个人都在其上面放置UI图层,但没有人触及内部。
这是不正确的。几乎每个设备供应商都在不同程度上“触及了内部”。只要他们与Play商店见面the compatibility requirements,Google就会认为他们的更改已被接受。
答案 1 :(得分: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" />
答案 2 :(得分:0)
正如我的问题本身所提到的那样,对于低于2.3.6的设备,OS覆盖keypress()
功能的效果很好。
问题从2.3.6开始。我不知道这些设备供应商做了什么,但keypress()
功能在所有设备上都不起作用。
同样从ICS开始,谷歌已停止一次性使用keypress()
功能。
那我们该怎么做呢。
我看到它的方式,如果我们试图覆盖主页按钮然后它是不可能的,但绝对我们可以听它。
在我们的Android清单中,我们使用<category android:name="android.intent.category.HOME" />
过滤器,这使得我们的活动成为家庭替换屏幕。
现在,当您按下主页按钮时,弹出的内容解析器将始终显示并询问哪个应用程序,即默认启动程序或您的应用程序应响应主页按钮单击。你总是可以在那里选择你的应用程序。
但这不会覆盖或禁用主页按钮。每当你按下主页按钮时,同样的事情会一次又一次地重复,直到你的应用程序默认为止,通过点击内容解析器弹出窗口中给出的默认复选框。
现在,一旦您选择了应用程序作为默认主页,按下将始终启动您的应用程序。
完成......不。出现的问题是,如果您离开应用程序,主页按钮仍会启动您的应用程序。一旦你的工作完成,如何摆脱它。
我们要做的是关闭或调用活动的finish(),在此之前我们应该使用以下方法将包设置设置为默认值:
paramPackageManager1.setComponentEnabledSetting(localComponentName2, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 1);
这会将您的活动中的主页按钮关联起来。