无法在特定android设备上禁用Home按钮

无法在特定android设备上禁用Home按钮,android,android-homebutton,Android,Android Homebutton,我知道这个问题被问了很多次,答案总是“不,我们不能禁用主页按钮” 我有一点不同的问题要问 我编写了简单的代码,其中我的活动覆盖onKeyDown()并为所有按键返回true 理论上,这意味着任何打开应用程序的人都会被卡在那里,并且没有离开应用程序的选项 当我在不同的设备上测试此应用程序时,我做了以下观察: 在操作系统为2.2.2的摩托罗拉设备上,主页按钮被禁用 在操作系统为2.3.5的HTC设备上,主页按钮被禁用 在操作系统为2.3.7的索尼上,主页按钮被禁用 在操作系统分别为2.2.1和2.3

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

我有一点不同的问题要问

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

理论上,这意味着任何打开应用程序的人都会被卡在那里,并且没有离开应用程序的选项

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

  • 在操作系统为2.2.2的摩托罗拉设备上,主页按钮被禁用
  • 在操作系统为2.3.5的HTC设备上,主页按钮被禁用
  • 在操作系统为2.3.7的索尼上,主页按钮被禁用
  • 在操作系统分别为2.2.1和2.3.3的三星上,主页按钮被禁用
  • 在操作系统分别为2.3.6和4.0.4的三星上,主页按钮保持启用状态
  • 这些观察结果似乎非常矛盾

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

    据我了解,到目前为止,没有一家厂商定制了Android操作系统。每个人都把UI层放在它上面,但没有人触及它的内部

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

    如果要处理HOME(主页)按钮,请实现HOME(主页)屏幕

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

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

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

    如果要处理HOME(主页)按钮,请实现HOME(主页)屏幕

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


    这是不正确的。几乎每个设备供应商都在不同程度上“触及了内部”。只要他们在Play Store见面,谷歌就会认为他们的更改是可以接受的。

    正如我在问题中提到的,对于2.3.6操作系统以下的设备,覆盖
    keypress()
    功能工作得很好

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

    此外,从ICS开始,谷歌已经停止一次性使用
    keypress()
    功能

    那我们怎么做呢

    在我看来,如果我们试图覆盖主页按钮,那么这是不可能的,但我们肯定可以听它

    在我们的android清单中,我们使用了
    过滤器,这使我们的活动成为主替换屏幕。 现在,当您按下主页按钮时,内容解析器弹出窗口将始终出现,并询问哪个应用程序(即默认启动器)或您的应用程序应响应主页按钮单击。你可以在那里选择你的应用程序

    但这不会覆盖或禁用“主页”按钮。每当您按下home按钮时,相同的操作都会一次又一次地重复,直到您通过单击content resolver弹出窗口中的use as default复选框将应用程序设为默认

    现在,一旦你选择了你的应用程序作为默认主页,按下按钮就会启动你的应用程序

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

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

    ParamPackageManager.setComponentEnabledSetting(localComponentName2,PackageManager.COMPONENT_ENABLED_状态_默认值,1)


    这将使“主页”按钮与您的活动解除关联。

    您可以尝试一下:

    @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" />
    
    
    
    hi@commonware,我同意你所说的一切。但如果是这样的话,那么为什么像学步锁这样的应用程序能够禁用主屏幕按钮而不将其应用程序转换为主屏幕应用程序呢??。我也可以通过实现主屏幕来禁用home按钮,但选择应用程序以完成操作的提示会导致问题。如果我选择了我的应用程序,那么它是确定的,但是如果我选择了除home按钮之外的任何其他应用程序,那么它将在我的应用程序中开始工作。蹒跚学步的锁可以绕过这个功能…@dexprab:蹒跚学步的锁是一个主屏幕,我最后一次检查。如果它有你描述的功能,那么学步锁利用的安全漏洞就需要关闭。我不认为有任何安全漏洞,因为该应用程序有一个高效的基于模式的注销机制。它也被列为许多网站上最好的应用之一。我想如果这是一个安全问题,谷歌可能已经调查过了。即使是这样,我也不知道他们是如何做到的。我有他们的清单,但这对我实现目标没有多大帮助functionality@dexprab:欢迎你发表意见。有一天,如果恶意软件接管了你的设备,并阻止你离开恶意软件,因为它接管了主页按钮,你会改变主意。我正试图帮助防止这种恶意软件。我认为“禁用主页按钮”的一部分是为了防止“使用完整操作”对话框。如果用户在对话框中选择默认的android launcher,您将无法再处理home按钮。作为launcher应用程序后,将添加正确的答案。通过在用户离开活动时返回活动,禁用后退按钮、taskmanager按钮和通知栏交互