意图没有被singleTop Activity选中

时间:2012-10-12 14:17:56

标签: android android-intent notifications

我有一个被定义为singleTop的Activity,因此只存在一个实例。

   <activity
        android:name=".MyMainActivity"
        android:label="@string/app_name" 
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 
        android:launchMode="singleTop" android:multiprocess="true">

我使用某些数据设置了通知意图,并将其包含在PendingIntent中,并将其发送到通知管理器。

Intent notificationIntent = new Intent(context, MyMainActivity.class); 
notificationIntent.setAction(MyMainActivity.CustomInternalMessageAction);
notificationIntent.putExtra(MyMainActivity.ReceiveTestMessage, rawMessageText);

...
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
mNotificationManager.notify(number, notification);  

如果actiivty没有运行,意图会按预期通过onCreate()启动活动。

如果活动正在运行,但处于停止状态/未处于前台(例如单击主页按钮时),并且单击了通知,则会按预期调用我的活动的onNewIntent()。

但是,如果活动在前景中已被调用,则不会调用onNewIntent()。

如何设置此通知,以便我的singleTop Activity在暂停/停止状态时发送意图(并且在我提到的其他情况下仍然起作用)。我认为在我的notificationIntent对象上设置了一个标志,但是对于singleTop活动的情况,标志的功能并不是很清楚。

1 个答案:

答案 0 :(得分:8)

如果您的应用程序由多个活动组成,那么如果您希望在该活动处于活动状态时收到singleTop来电,那么剩余活动也需要定义为onNewIntent()

假设主要活动为A,并定义为singleTop,并从那里开始活动B未定义为singleTop。如果您现在选择调用应用程序的通知,则应用程序将从活动B开始,但不会调用onNewIntent()

您还可以覆盖此行为,添加标记Intent.FLAG_ACTIVITY_CLEAR_TOP,从堆栈中删除活动B,而活动A将重新调用onNewIntent()上的调用。