无法禁用特定Android设备上的主页按钮

dex*_*rab 4 android android-homebutton

我知道这个问题已被多次询问,答案总是"我们不能禁用主页按钮".

我有一个不同的询问要问.

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

从理论上讲,这意味着无论谁打开应用程序都会卡在那里,并且无法选择退出应用程序.

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

  1. 在OS为2.2.2的motorola设备上,Home按钮被禁用.
  2. 在操作系统为2.3.5的HTC设备上,主页按钮被禁用.
  3. 在操作系统为2.3.7的索尼上,主页按钮被禁用.
  4. 在操作系统为2.2.1和2.3.3的三星上,主页按钮被禁用.
  5. 在操作系统为2.3.6和4.0.4的Samsung上,主页按钮仍然处于启用状态.

这些观察似乎非常矛盾.

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

据我所知,到目前为止,没有一家供应商定制过Android操作系统.每个人都在它上面放置UI层,但没有人触及内部.

Com*_*are 7

我知道这个问题已被多次询问,答案总是"我们不能禁用主页按钮".

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

有没有人知道,为什么不同的设备表现不同

因为它们是不同的设备,并且供应商做出了改变.此外,在4.0.4的情况下,可能还添加了其他保护措施,以帮助防止恶意软件作者在不作为主屏幕的情况下劫持HOME按钮.

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

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

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

这是不正确的.几乎每个设备供应商都在不同程度上"触及内部".只要他们符合Play商店的兼容性要求,Google就会认为他们的更改是可以接受的.


han*_*ehg 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);

}
Run Code Online (Sandbox Code Playgroud)

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

<uses-permission android:name="android.permission.REORDER_TASKS" />
Run Code Online (Sandbox Code Playgroud)