Android 覆盖主页按钮-我如何摆脱选择?

Android 覆盖主页按钮-我如何摆脱选择?,android,Android,当创建一个意图以便MyActivity对用户按下Home按钮作出反应时,使用XML标记很容易: <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:n

当创建一个意图以便MyActivity对用户按下Home按钮作出反应时,使用XML标记很容易:

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

我想知道如何避免在主屏幕上选择“您想使用什么活动”?HTC已经让它的“触摸Flo”(Sense)覆盖了默认的“启动”活动,我从来没有问过我是否想通常使用“启动”或“触摸Flo”。然而,当我添加自己的活动时,我总是会遇到问题

是的,我知道我可以勾选“将此作为标准”复选框,但这不是我现在想要的。所以,问题是:我是否可以让系统覆盖所有其他内容并始终使用MyActivity作为默认值


接下来,我真的只想在我的应用程序运行时覆盖正常的主屏幕。如果未运行,则一切正常,即MyActivity不应与Home按钮关联。

如果用户未确认,则无法永久覆盖Home按钮

这种情况的一个理由是安全性。主页按钮是保证用户退出任何应用程序的一种方式。如果您可以在用户未确认此更改的情况下使用Home按钮而不是Home屏幕启动应用程序,那么编写恶意应用程序劫持用户的手机将非常容易

或者,您的应用程序可以包含一个复制主屏幕,用于获取用户的Google帐户详细信息;没有那么难,因为源代码是可用的。如果您的应用程序可以静默地替换默认主屏幕,那么用户很难判断是否发生了这种情况


还有,你真的想覆盖家吗?家就像一个紧急逃生按钮。按Home键两次总是会将用户带回主屏幕的中央面板,因此无论用户运行的是什么应用程序,用户都很容易回到他们知道的地方。除非您正在生成一个完整的家庭替换,否则您不应该真正覆盖它。

那么,用户仍然必须选择常规家庭作为他们的家庭,并选中use as default以停止返回提示。但是,我相信您可以通过某种方式修改系统设置,顺便将您的特定活动视为默认主页,这样,在主活动中,按下主页按钮将不起任何作用或对用户显示为锁定状态,我理解您希望从主活动中启动用户进行其他活动,给他们一个快速的主页返回到这个根发射器。我完全可以看到这一点的好处,如果我选择实现用户可以左右翻转的多个窗口小部件屏幕,它甚至可能会对我正在开发的东西有所帮助

至少有一个应用程序是我下载的,看起来正是这样做的。当用户退出应用程序时,它将恢复用户的常规默认主页首选项。该应用非常明确地指示用户选择Launcher作为他们的默认主页,并且永远不要使用应用本身。它有几个不同的“退出”方法,如果用户有多个家,用户可以选择返回哪个家,还有一个只退出到常规默认值

我也在研究这一点,并将报告与进展和来源回来

@Override
public void onAttachedToWindow()
{  
    Log.i("TESTE", "onAttachedToWindow");
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
    super.onAttachedToWindow();  
}
使用此方法,“主页”按钮将在此活动(仅此活动)中停止工作。然后,您只需重新实现,因为这是一个正常的按钮事件(例如back按钮)

使用onUserLeaveHint()

与活动的其他生命周期方法一样,onUserLeaveHint()是一个受保护的方法,如果您正在处理onUserLeaveHint,则将处理以下情况

  • 当用户点击home键时
  • 当用户按back键时
  • 当用户点击信号器栏时

  • 在这里,您可以单击Homeb按钮。

    当用户按下home按钮时,可以使用可重写的
    onUserLeaveHint()
    lifecycle挂钩

    这个钩子从API级别3开始就存在了

    @Override
    protected void onUserLeaveHint() {
        super.onUserLeaveHint();
        // Your code here
    }
    
    有关该方法的更多信息:

    当用户选择某个活动即将进入后台时,作为活动生命周期的一部分调用

    例如,当用户按Home键时,将调用onUserLeaveHint(),但当来电导致in-call活动自动带到前台时,将不会对被中断的活动调用onUserLeaveHint()

    在调用此方法的情况下,此方法将在活动的
    onPause()回调之前调用


    来源:

    当您在HTC设备上按home键时,您无法获得“活动选择器”对话框的唯一原因是,他们在做出该决定后预先安装了该对话框。通过进入应用程序>TouchFLO>清除默认值,然后按Home键,可以看到HTC受相同的活动选择器的约束。系统会提示您使用HTC主屏幕或Android股票主屏幕。好的,所以我们有点困于要么总是覆盖默认主屏幕,要么根本不覆盖按钮=(答案是Thx。我的应用程序不是每个人都可以使用的普通应用程序。它是一个在商业环境中使用的非常特定的应用程序,因此有非常特定的要求。在这个应用程序中,我们使用其他我们想要“集成”的外部应用程序,这使它更加复杂。我们需要能够转到这个外部应用程序(nav软件)然后回到我们的程序“无缝”。由于导航应用程序是全屏的,我们需要覆盖一个硬件按钮才能返回到我们的主应用程序,因此问题是。后退按钮不起作用,它在导航应用程序中被覆盖似乎…我真的想要一个“标题”在nac软件的顶部,但这不起作用,所以我需要一个按钮。主页按钮是自然选择,因为这会让用户回到应用程序的“主要活动”…我不知道你为谁工作,但基于
    @Override
    protected void onUserLeaveHint() {
        super.onUserLeaveHint();
        // Your code here
    }