3

我有一个 Activity 被定义为 singleTop 以便只有一个实例存在。

   <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);  

如果活动未运行,则意图按预期通过 onCreate() 启动活动。

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

但是,如果 Activity 在前台时已被调用,则不会调用 onNewIntent()。

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

4

1 回答 1

8

如果您的应用程序由多个活动组成,singleTop那么如果您希望onNewIntent()在该活动处于活动状态时接收呼叫,则还需要定义其余活动。

假设主要活动是A并且被定义为singleTop并从那里开始活动B未定义为singleTop。如果现在您选择一个调用您的应用程序的通知,该应用程序将在活动中启动BonNewIntent()不会被调用。

您还可以覆盖此行为,添加从堆栈Intent.FLAG_ACTIVITY_CLEAR_TOP中删除活动的标志,活动将接收 on 的调用。BAonNewIntent()

于 2012-10-12T17:01:31.983 回答