这让我坚持了一段时间.
有没有办法可靠地检测是否在Android应用程序中按下了主页按钮?
如果不这样做,是否有一种强有力的方式来告诉导致活动进入onPause的原因?即我们可以检测它是由新活动启动还是按回/ home引起的.
我看到的一个建议是覆盖onPause()并调用isFinishing(),但是当按下主页按钮时,这将返回false,就像新活动开始时一样,因此无法区分这两者.
任何帮助非常感谢.
**更新**:感谢@ android-hungry这个链接:http://nisha113a5.blogspot.com/
覆盖以下方法:
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
}
Run Code Online (Sandbox Code Playgroud)
然后,以下事件将被触发按下主页按钮:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_HOME)
{
//The Code Want to Perform.
}
});
Run Code Online (Sandbox Code Playgroud)
我不确定这条线是否有任何副作用:
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
Run Code Online (Sandbox Code Playgroud)
因此,与普遍的看法相反,您实际上可以听取主键.令人担忧的是,您可以返回false并让home键不执行任何操作.
更新:正如预期的那样,这有一些副作用 - 在启用此模式的情况下,嵌入式视频和谷歌地图似乎不可见.
更新:据说这个hack不再适用于Android 4.0以上版本
创建一个Intent以便MyActivity对用户做出反应时,使用XML标记很容易按下Home键.
<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>
Run Code Online (Sandbox Code Playgroud)
我想知道如何避免在主屏幕上选择"你想要使用什么活动"?HTC已经使其"Touch Flo"(Sense)覆盖默认的"开始"活动,如果我想通常使用"开始"或"TouchFlo",我永远不会得到问题.但是,当我添加自己的Activity时,我总能得到问题.
是的,我知道我可以检查"将其作为标准使用" - 检查框,但这不是我现在想要的.所以,问题是:我可以使系统覆盖其他所有内容并始终使用MyActivity作为默认值吗?
接下来,我真的只想在我的应用程序运行时覆盖正常的主屏幕.如果它没有运行,一切都应该正常工作,即MyActivity不应该与Home按钮相关联.
任何想法都会很棒.
我想为我的应用程序创建模态对话框.
所以当模态对话框打开时,其他活动被阻止.没有像后退按钮或按下主页按钮那样的事件.
并在该对话框取消和确定两个选项按钮.
谢谢...