我正在构建一个启动器/主屏幕替换应用程序,我注意到所有发射器都允许用户按下主页以转到启动器的第一个屏幕。因此,显然可以听取家庭更换应用程序的主页键,但我无法弄清楚如何。
当用户在我的启动器内按下主页时,如何收听主页键并触发setCurrentItem(0)?
修改
到目前为止,我有两个选择:
@Override
public void onPause() {
super.onPause();
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
if(!this.isFinishing())
{
if (sharedPrefs.getBoolean("user_called", false))
{
// Si fue por una llamada del usuario eliminar bandera y no hacer nada
Utils.setUserCalled(getApplicationContext(), false);
}
else
{
mPager.setCurrentItem(0);
}
}
}
另一种方法是:
Boolean appState = false;
@Override
public void onPause() {
super.onPause();
appState = false;
}
@Override
public void onResume() {
super.onResume();
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
if(!appState)
{
if (sharedPrefs.getBoolean("user_called", false))
{
// Si fue por una llamada del usuario eliminar bandera y no hacer nada
Utils.setUserCalled(getApplicationContext(), false);
}
else
{
mPager.setCurrentItem(0);
}
}
}
两者都使用被调用的标记user_called来知道用户是否开始呼叫。我现在的问题是,当手机响铃时,两种方法都会失败。有没有办法过滤这些情况?
答案 0 :(得分:1)
isFinishing()
当活动进行完成或销毁时,返回TRUE 。
isFinishing()
当活动转到后台时,返回FALSE 。
@Override
protected void onPause() {
super.onPause();
if (!this.isFinishing()){
//Insert code for HOME key Event
}
}
答案 1 :(得分:1)
Ovverriding onUserLeaveHint()
与我合作 - 我可以在用户离开主页按钮后立即执行操作,并在来电时使用it's not called。
不知道这是否适用于家庭活动。
@Override
public void onUserLeaveHint() {
super.onUserLeaveHint();
mPager.setCurrentItem(0);
}
答案 2 :(得分:1)
您当然可以使用OnPause(),但您也可以尝试:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_HOME) {
//do things
return true;
}
return super.onKeyDown(keyCode, event);
}
答案 3 :(得分:1)
如前面的答案中所述,您可以挂钩主页按下事件。但是,这仅在您的应用程序正在运行时才会起作用(即显示在屏幕上)。
但如果我理解你的话,你真的想要别的东西。您正在制作自定义启动器,因此您希望Android在按下主页按钮时启动您的应用。为此,您需要正确设置AndroidManifest.xml文件。
这是一个完整的分步指南,如何制作自定义启动器应用程序。第3节详细描述了如何将您的应用程序注册为启动器。
http://code.tutsplus.com/tutorials/build-a-custom-launcher-on-android--cms-21358
答案 4 :(得分:1)
您无法收听主页按钮,因为它是系统事件,不会传送到应用程序。这在文档here中有所描述,也可以从Android代码here中看到。背后的想法很简单 - 你不应该写一个会劫持手机的应用程序。您可以“中断”后退按钮功能,但不能“中断”主页按钮功能。
现在第三方发射器通常做的是首先将清单中的启动器活动启动模式声明为 singleInstance :android:launchMode="singleInstance"
。然后,除了覆盖onCreate()
之外,您还会覆盖onNewIntent()
。当活动已经运行时,通常会调用它而不是onCreate()
,但是有人发出了再次启动它的意图。如果是启动器,它将在您的启动器已经运行时被调用,但系统会激活启动它的意图,因为用户按下了主页按钮。在该功能中,您可以转到默认的“主页”。