我创建了一个主屏幕替换应用程序。根据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代码时,系统都会提示用户选择一个主屏幕应用程序,并将其列为其中一个选项。 HomeScreenActivity
本身就是一个启动画面:可以启动一些GridView
个应用。
根据我的问题:当从主屏幕启动应用程序时,按Home将返回HomeScreenActivity。完美。
但是,您也可以从主屏幕中访问SettingsActivity
。很简单,以下代码存在于某处:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
现在,当我按下主页按钮时,第一次一切正常......但是第二次进入设置时,主页按钮不起作用。我的应用仍在“设置”屏幕上。甚至撇开它第一次工作的事实,是什么可能导致主页按钮停止在我的主屏幕替换应用程序中工作?我有选择地从主屏幕和设置中注释掉了大量的代码,详尽地检查是否有任何特定的代码块负责:似乎没有一个是罪魁祸首。
这个错误似乎发生在某个更高级别,我无法弄清楚那是什么。我在我的设备上运行Android 5.0。有没有人经历过类似的事情,如果有的话,我该如何解决这个问题或者我应该在哪里搜索代码中的修复?
答案 0 :(得分:1)
我遇到了完全相同的问题;试图从我的主屏幕应用程序启动我自己的活动。我发现在我的HOME活动中添加以下行并且清单中的子活动修复了它:
android:launchMode="singleInstance"