我的应用程序有如下活动堆栈
清单是这样的
<activity A>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity B android:launchMode="singleTask"/>
<activity C/>
当我从启动器启动应用程序时,它充当A-
但当我从通知启动应用程序时,因为我不想显示加载屏幕,启动活动B。所以,用户可以导航B-
但当用户在活动C中按Home键并从最近的应用程序列表中选择应用程序时,B会重新启动,状态不会保留。所以C活动总是消失。
我尝试了许多标志选项,但我没有找到解决方案。我想要的是应用程序的行为就像用户从启动器启动应用程序一样。
我为这样的通知创建了待定意图。在我的应用程序中,我应该使用Intent。为活动B标记活动清除顶部
。
Notification notice = new Notification(R.drawable.icon_notification, context.getString(R.string.app_name), System.currentTimeMillis());
Intent intent = new Intent(context, B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtras(i);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
我认为最近的应用程序列表发送了相同的通知意图,所以总是调用活动B。但当我从launcher启动应用程序时,它只会将我发送到最后一个活动C,而不是B。
请帮帮我(
我已经解决了这个问题,如下所示。
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0 ) {
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_NEW_TASK);
} else {
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
我已经在下面注册了活动
<activity
android:name="D"
android:clearTaskOnLaunch="true"
android:excludeFromRecents="true"
android:exported="false"
android:launchMode="singleInstance"
android:noHistory="true"
android:taskAffinity="xxx"
android:theme="@android:style/Theme.NoDisplay">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
</intent-filter>
</activity>
我假设您使用Intent.FLAG_ACTIVITY_NEW_TASK
处理两个具有自己活动的独立任务。第一个任务是在您从启动器启动A
时创建的,而第二个任务是在您从通知启动B
时创建的。如果是这样,那么您应该确保两个单独的任务是您真正需要的。
由于该通知已经启动了该应用程序,它现在已经成为历史的一部分——你可能只想在实际点击时处理它。检查:
(getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0
如果这是真的,那么活动是从历史记录中打开的,而不是通知的意图。
当我收到通知时,我的应用和活动在我最近的应用列表中。当我点击通知时,我希望通知的意图得到尊重。在我的例子中,我想重新启动活动(暴力)并传递新的意图:所以,完成,然后重新创建。我正在阅读一些标签,比如和,但我对它们的理解还不够,不知道如何强制“完成然后重新创建”我的活动。哦,这个活动就是main ACTIVITY。 GcmListenerService中的代码片段使用 用于发送通知意图 或者说 如果
我正在开发一款针对ICS手机的应用程序。 在应用程序中,我有一个飞溅屏幕和几个其他屏幕,可以从飞溅屏幕或通过NFC触摸启动。我的一个活动包含以下意图过滤器: 由于某些原因,我无法理解,每当启动包含上述意图过滤器的活动时,当用户按下“主页”按钮时,该活动不会出现在“最近的应用”列表中。通过调试器,我验证了它没有被销毁,只是停止了。 如果启动屏幕在ThingActivity之前打开,则启动将显示在最近
我知道关于这个问题有一些讨论,但我的情况不同。 我的案例:LanchActive(加载动画)- 如果应用程序在后台,请将应用程序带到前台,并在Mainactive中显示选项卡B。 如果应用程序被杀死,启动应用程序,LanchActive- 我已经实现了以上内容,我设置了主要活动: 具有以下设置的通知: 在主活动中: 我在MainActivity中使用singleTask lanchMode的原因是
我正在写一个UWP应用程序,我有一个ScheduledToastNotification在应用程序挂起时添加到日程中(例如,像一个提醒)。但是,如果我关闭了app,通知准时出现,但是当我点击通知时(没有按钮,一般只是在通知上),app没有正确启动,停在闪屏处。 如何使应用程序正确地重新启动? 多谢了。
无错误FCM工作良好,当应用程序打开,如果关闭或刷掉,通知将不会触发。
我正在实施GCM。我的应用程序有两个活动,比如和。我正在使用此代码从通知栏启动: NotificationBar打开带有Intent的活动,说“B-通知-意图”,然后我使用后退按钮从打开活动,然后我再次启动从有一个新的Intent(说“B-A-意图”)。我使用下面的代码: 然后我在中获得新数据(即的屏幕被刷新)。但如果我按下Home(主页)按钮,然后从最近的应用程序启动应用程序,那么我会变老屏幕上