我有一个可以创建持久通知的后台服务。当用户点击通知时,它会启动活动。然后,用户可以按下主页按钮以停止该活动。
如果用户然后再次点击通知我想重新启动(并显示)相同的活动(如果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'是对用户第一次选择通知时创建的活动的引用,但这样做不会导致活动显示。
答案 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);