覆盖主页button – 如何摆脱select?
创build一个Intent时,MyActivity对用户起作用,使用XML标记可以轻松实现主页button:
<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>
我想知道如何避免在主屏幕上select“你想使用什么活动”? HTC已经将其“Touch Flo”(感知)覆盖默认的“开始”活动,并且如果我通常要使用“开始”或“TouchFlo”,我永远不会得到问题。 但是,当我添加自己的活动时,我总是得到这个问题。
是的,我知道我可以检查“使用这个标准” – checkbox,但那不是我现在想要的。 所以,问题是:我可以让系统重写所有其他的东西,并始终使用MyActivity作为默认值?
接下来,我真的只想在应用程序运行时覆盖正常的主屏幕。 如果它没有运行,一切都应该正常工作,即MyActivity不应该与主页button相关联。
任何想法都会很棒。
没有用户确认,你不能永久覆盖主页button。
为什么会出现这种情况的一个理由是安全问题。 主页button是用户可以保证退出任何应用程序的一种方式。 如果您可以使主页button启动您的应用程序,而不是用户确认此更改的主屏幕,那么编写劫持用户电话的恶意应用程序将非常容易。
或者,您的应用程序可能包含复制主屏幕,收集用户的Google帐户详细信息; 没有那么难,因为来源是可用的。 如果您的应用程序可以静默地replace默认的主屏幕,用户很难说出这种情况。
另外,你真的想重写家庭吗? 家就像一个紧急逃生button。 按Home两次总是将用户带回主屏幕的中央面板,因此无论他们运行什么应用程序,用户都可以轻松地返回到他们认识的地方。 除非你正在生产一个完整的家庭替代品,否则你不应该压倒这个。
@Override public void onAttachedToWindow() { Log.i("TESTE", "onAttachedToWindow"); this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); }
使用此方法,HOMEbutton停止在此活动中工作(仅此活动)。 然后你只需重新实现,因为这是一个正常的button事件(例如后退button)。
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_HOME) { Log.i("TESTE", "BOTAO HOME"); return true; } return super.onKeyDown(keyCode, event); }
那么,用户仍然必须select普通家庭作为他们的家庭使用作为默认检查,以阻止提示回来。 不过,我相信你可能会以某种方式修改系统设置,以便偶然地将你的特定活动视为默认的家庭,这样,家庭的按下就不会在主要活动中不做任何事情或者看起来locking在用户身上,我知道你希望从那里启动你的用户进入其他活动,给他们一个快速的家庭新闻返回到这个根启动器。 我完全可以看到这个好处,如果我select实现用户可以左右翻转的多个小部件屏幕,它甚至可以使我正在开发的东西受益。
有至less有一个应用程序,我已经下载似乎是做这个。 当用户退出应用程序时,它将恢复用户的常规默认家庭首选项。 该应用程序指示用户非常明确地select启动器作为他们的默认家,从来没有这样做的应用程序本身。 它有几个不同的“退出”方法,让用户可以select返回到哪个家庭,如果他们有多个,并退出到正常的默认状态。
我正在研究这个,并将报告与进展和来源。
使用onUserLeaveHint()
onUserLeaveHint()是该活动的其他生命周期方法的受保护方法,如果您正在处理onUserLeaveHint,则将处理以下情况
- 当用户点击主键时
- 当用户返回键时
- 当用户点击信号栏时
在这里你可以捕捉Homebbutton点击。
祝你好运。 🙂
OnUserLeaveHint()可以捕获用户按主页button。
自从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()