我希望广播接收器可以以以下方式启动我的应用:
如果应用程序不在前台或后台,则启动应用程序,就好像从启动器启动一样。
如果应用程序在后台,则将其带到前台,并保持其上次的状态。
如果应用程序在前台,则不执行任何操作。
以下是我的代码:
@Override
public void onReceive(Context context, Intent intent) {
Intent launch_intent = new Intent("android.intent.action.MAIN");
launch_intent.setComponent(new ComponentName("com.example.helloworld","com.example.helloworld.MainActivity"));
launch_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
launch_intent.addCategory(Intent.CATEGORY_LAUNCHER);
launch_intent.putExtra("some_data", "value");
context.startActivity(launch_intent);
}
MainActivity是我的根活动。正如我所说的,如果应用程序已经在运行,则只需将其移到前台而不更改其状态。如果有一些活动在MainActivity之上,则保持原状。
大多数情况下,上述代码工作得很好,但有时候我注意到当它从后台调回时,应用程序被重新启动(或状态被重置---根活动又回到了顶部)。
我应该使用什么代码?任何帮助都将不胜感激!
ActivityManager.getAppTasks()
和AppTask.moveToFront()
似乎是不错的选择,但这些仅适用于API 21及更高版本。 - KarakuristartActivity
(一个启动根Activity
的Intent
,并在新任务中启动),这将启动应用程序(如果它没有运行)或将后台中的现有任务带到前台。 - David Wasser