主页按钮仅在我自己的应用程序处于前台时不起作用

Home Button that doesn't work only while my own app is in foreground

我创建了一个主屏幕替换应用程序。根据此处关于 SO 的一些建议,我通过创建以下两个活动来解决这个问题:

<activity
        android:name=".Activities.GhostLauncherActivity"
        android:enabled="false"
        android:label="@string/title_activity_ghost_launcher">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

        <category android:name="android.intent.category.HOME"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

<activity
        android:name=".Activities.HomeScreenActivity"
        android:enabled="true"
        android:label="@string/app_name"
        android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

        <category android:name="android.intent.category.HOME"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

然后按如下方式切换它们的启用状态:

ComponentName component = new ComponentName(this, GhostLauncherActivity.class);
ComponentName secComponent = new ComponentName(this, HomeScreenActivity.class);

packageManager.setComponentEnabledSetting(component, packageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
packageManager.setComponentEnabledSetting(secComponent, packageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

Intent intent = new Intent(Intent.ACTION_MAIN);

intent.addCategory(Intent.CATEGORY_HOME);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

startActivity(intent);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

packageManager.setComponentEnabledSetting(component, packageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

这很有魅力。每次我 运行 上面的 Java 代码时,系统都会提示用户 select 一个主屏幕应用程序,我的应用程序被列为选项之一。 HomeScreenActivity 本身就是一个启动器屏幕:有一些 GridView 的应用程序可以启动。

根据我的问题:当应用程序从主屏幕启动时,按 Home 将 return 您转到 HomeScreenActivity。完美。

但是,您也可以从主屏幕访问 SettingsActivity。很简单,下面的代码存在于某处:

Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);

现在,当我按下主页按钮时,第一次一切正常...但是我第二次进入设置时,主页按钮不起作用。我的应用程序保留在“设置”屏幕上。即使撇开它第一次运行的事实不谈,是什么导致主屏幕按钮在我的主屏幕替换应用程序中停止工作?我已经 select 彻底地注释掉了主屏幕和设置中的代码块,详尽地检查是否有任何特定的代码块负责:none 似乎是罪魁祸首。

这个错误似乎发生在更高级别,我无法弄清楚那是什么。我的设备上 运行ning Android 5.0。有没有人经历过类似的事情,如果有,我该如何解决这个问题或者我应该在代码中的其他地方搜索修复程序?

我遇到了完全相同的问题;试图从我的主屏幕应用程序启动我自己的 activity。我发现将以下行添加到我的 HOME activity 并且清单中的 sub-activity 修复了它:

android:launchMode="singleInstance"