2015-01-08 20 views
2

我正在构建一个启动器/主屏替换应用程序,我注意到所有的启动器都允许用户按回家去启动器的第一个屏幕。所以显然可以听取家庭钥匙的家庭替代应用程序,但我一直无法弄清楚如何。当用户按下home时,将第一个屏幕设置为启动器上的当前项目?

当用户在我的启动器内按下家时,如何能够听到主键并触发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); 
     } 
    } 
} 

都使用callsed user_called一个标志,知道如果用户启动一个呼叫。我现在的问题是手机响铃时两种方法都会失败。有没有办法来过滤这些情况?

+0

你可能想看看这个http://scriptedpapers.com/2013/07/26/how-to-identify-android-home-key-event-without-overriding-home-key-event/ –

回答

1

你可以不听家里按下按钮,因为它是一个系统事件并没有传递到应用程序。这在文档here中描述,也可以从Android代码here中看到。背后的想法很简单 - 你不应该写一个会劫持手机的应用程序。您可以“中断”后退按钮功能,但不能使用主屏幕按钮功能。

现在第三方启动器通常在做什么,首先声明启动器活动启动模式为singleInstance in manifest:android:launchMode="singleInstance"。然后,除了覆盖onCreate()之外,您还可以覆盖onNewIntent()。当活动已在运行时,通常会调用它,而不是onCreate(),但有人发起了再次启动的意图。在发射器的情况下,它会在你的发射器已经运行时被调用,但是由于用户按下主页按钮,系统触发了启动它的意图。在该功能中,您可以转到默认的“主页”页面。

1
isFinishing() 

返回TRUE当活动即将结束或销毁。

isFinishing()  

返回FALSE当活动将背景

@Override 
protected void onPause() { 

    super.onPause(); 
    if (!this.isFinishing()){ 

        //Insert code for HOME  key Event 
    } 
} 
+0

你好,这是可行的,但我不知道如何在用户按下主页按钮和进行呼叫时区别 – lisovaccaro

1

Ovverriding onUserLeaveHint()作品与我 - 我可以为用户使用Home键叶尽快做出行动,并在it's not called来电的情况。

不知道这是否适用于家庭活动。

@Override 
public void onUserLeaveHint() { 
    super.onUserLeaveHint(); 
    mPager.setCurrentItem(0); 
} 
1

您可以使用课程的onPause(),但你也可以试试这个:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {  
    if(keyCode == KeyEvent.KEYCODE_HOME) { 
     //do things 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 
1

如前面提到的答案,你可以连接home键按下事件。但是,只有当您的应用程序正在运行时(即显示在屏幕上),这才会起作用。

但是如果我理解你是对的,你实际上还想要别的东西。您正在制作自定义启动器,因此您希望Android按钮启动您的应用程序。为了达到这个目的,你需要正确设置你的AndroidManifest.xml文件。

这是一个完整的分步指南,介绍如何制作自定义启动程序。第3节有详细的说明,如何将您的应用程序注册为启动程序。

http://code.tutsplus.com/tutorials/build-a-custom-launcher-on-android--cms-21358

相关问题