重新启动(并显示)已停止的活动

时间:2013-09-04 14:44:59

标签: android android-activity

我有一个可以创建持久通知的后台服务。当用户点击通知时,它会启动活动。然后,用户可以按下主页按钮以停止该活动。

如果用户然后再次点击通知我想重新启动(并显示)相同的活动(如果Android尚未销毁它 - 我很欣赏它),因此GUI状态就像用户离开它。

我怎样才能做到这一点?

活动的清单条目

<activity android:name=".mrwidget.MrWidget" android:theme="@android:style/Theme.NoTitleBar" android:launchMode="singleTask">
  <intent-filter><action android:name="android.intent.action.MAIN">  </action>
    <category android:name="android.intent.category.LAUNCHER"></category>
  </intent-filter>
</activity>

如果从按住“主页”按钮时获得的“最近的应用列表”中选择活动,我所追求的实际上与您获得的行为完全相同。

详细说明 - 当我第一次使用以下方式成功创建活动时点击通知:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mService.startActivity(i);

如果我按下主页按钮以切换此活动,然后按下主页按钮以显示“最近的应用程序列表”并从那里选择活动,它按预期工作 - 活动显示在状态中离开了,一切都很好。

当我也随后选择相同的通知时,我想要同样的行为,即它显示先前创建的活动。我尝试使用以下方法执行此操作:

intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
activity.startActivity(intent);

其中'activity'是对用户第一次选择通知时创建的活动的引用,但这样做不会导致活动显示。

2 个答案:

答案 0 :(得分:0)

显示通知时尝试使用此代码:

Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(this, "Title", "Text", pendingIntent);

MainActivity替换为您要启动的活动的类,并根据需要替换通知标题和文字的字符串。

答案 1 :(得分:0)

要获得与“将应用程序带到前台”相同的行为,您只需创建一个包含根活动并设置Intent.FLAG_ACTIVITY_NEW_TASK的Intent。根活动是清单中具有ACTION = MAIN和CATEGORY = LAUNCHER的活动。像这样:

Intent intent = new Intent(this, MyRootActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);