覆盖主页按钮 – 如何摆脱选择?

创建一个Intent以便MyActivity对用户做出反应时,使用XML标记很容易按下Home键。

      

我想知道如何避免在主屏幕上选择“你想要使用什么活动”? HTC已经使其“Touch Flo”(Sense)覆盖默认的“开始”活动,如果我想通常使用“开始”或“TouchFlo”,我永远不会得到问题。 但是,当我添加自己的Activity时,我总能得到问题。

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

接下来,我真的只想在我的应用程序运行时覆盖正常的主屏幕。 如果它没有运行,一切都应该正常工作,即MyActivity不应该与Home按钮相关联。

任何想法都会很棒。

Solutions Collecting From Web of "覆盖主页按钮 – 如何摆脱选择?"

没有用户确认,您无法永久覆盖主页按钮。

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

或者,您的应用程序可能包含一个复制主屏幕,用于收集用户的Google帐户详细信息; 不是那么难,因为源可用。 如果您的应用程序可以默默地替换默认的主屏幕,那么用户很难说这已经发生了。

另外,你真的想要覆盖Home吗? 家就像一个紧急逃生按钮。 按两次Home将始终将用户带回主屏幕的中央面板,因此无论他们运行什么应用程序,用户都可以轻松回到他们知道的某个地方。 除非你正在制作一个完整的Home替换品,否则你不应该真的重写这个。

 @Override public void onAttachedToWindow() { Log.i("TESTE", "onAttachedToWindow"); this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); } 

使用此方法,HOME按钮在此活动中停止工作(仅此活动)。 然后你只需重新实现,因为它是一个普通的按钮事件(例如后退按钮)。

 public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_HOME) { Log.i("TESTE", "BOTAO HOME"); return true; } return super.onKeyDown(keyCode, event); } 

那么,用户仍然必须选择常规家庭作为他们的家庭使用默认选中以停止提示返回。 但是,我相信您可能会以某种方式修改系统设置,以便将您的特定活动视为默认主页,这样按下主页将无效或在主要活动中显示锁定用户,我知道你希望从那里开始你的用户进入其他活动,让他们快速回家按回到这个根启动器。 我可以完全看到这个的好处,如果我选择实现用户可以左右翻转的多个小部件屏幕,它甚至可能有益于我正在开发的内容。

我已经下载了至少一个应用程序,似乎正在这样做。 当用户退出应用程序时,它将恢复用户的常规默认主页首选项。 该应用程序非常明确地指示用户选择Launcher作为其默认主页,并且永远不会使用应用程序本身。 它有一些不同的“退出”方法,如果用户有多个,则可以选择返回哪个家,以及退出常规默认的家。

我正在研究这个问题,并将报告进展和来源。

OnUserLeaveHint()可以捕获用户按下主页按钮。

自API级别3以来一直存在。

 @Override protected void onUserLeaveHint() { super.onUserLeaveHint(); /* * Called as part of the activity lifecycle when an activity is about to go into the background * as the result of user choice. For example, when the user presses the Home key, onUserLeaveHint() will be called, * but when an incoming phone call causes the in-call Activity to be automatically brought to the foreground, * onUserLeaveHint() will not be called on the activity being interrupted. * In cases when it is invoked, this method is called right before the activity's onPause() callback. */ } 

资料来源: https : //developer.android.com/reference/android/app/Activity.html#onUserLeaveHint()

使用onUserLeaveHint()

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

  1. 当用户点击主页键时
  2. 当用户点击密钥时
  3. 当用户点击信号器栏时

在这里你可以点击Homeb按钮点击。

祝你好运。 🙂