【问题标题】:Android onCreate() not called with Notification未使用通知调用 Android onCreate()
【发布时间】:2014-08-29 16:08:51
【问题描述】:

我遇到了有趣的意图工作流处理。 我创建一个这样的通知:

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
        .setSmallIcon(R.drawable.abc_textfield_search_default_holo_dark).setContentTitle("Мероприятие изменилось")
        .setContentText(eventToShow.valueAt(i).name + " " + eventToShow.valueAt(i).date).setAutoCancel(true);
    Intent resultIntent = new Intent(context, MainActivity.class);
    resultIntent.putExtra(MainActivity.NOTIFICATION_EVENT_DISPLAY, eventToShow.valueAt(i).id);
    PendingIntent resultPendingIntent = PendingIntent.getActivity(context,0,resultIntent,PendingIntent.FLAG_UPDATE_CURRENT);
    mBuilder.setContentIntent(resultPendingIntent);
    NotificationManager mNotifyMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    mNotifyMgr.notify(eventToShow.valueAt(i).id, mBuilder.build());

当通知到达用户时,我希望当他点击它时 MainActivity.class 将处理这个意图。 我在MainActivity.onCreate() 中处理有关意图的信息。

如果我点击应用外的通知,一切都会正常。 Activity 正确处理了这个意图并显示了我的预期。

但是当我在我的应用程序中点击通知时,我的MainActivity.class 没有新的实例并且onCreate() 没有触发。我以为它会创建MainActivity.class的新实例

你能解释一下这是默认行为吗?我应该如何处理这种情况?

测试我的应用后,我找到了下一个。

a) MainActivity -> 获取通知 -> 关闭应用 -> 打开应用(MainActivity) -> 按下通知 -> 通知按预期打开 MainActivity 的新实例。

b) MainActivity -> 获取通知 -> 按下通知 -> 没有发生任何事情

【问题讨论】:

  • 尝试在未决意图中使用其他标志,可能是 PendingIntent.FLAG_CANCEL_CURRENT 或者您可以在意图 Intent.FLAG_ACTIVITY_NEW_TASK 中设置标志。这应该在创建时触发。
  • 你能在onResume()getIntent() 中得到那个intent 吗?
  • @BobanS。尝试了这两个想法,但 Activity.onCreate() 没有触发。
  • @BobanS。出于某种原因,当我从 onResume 调用int eventId = getIntent().getIntExtra(NOTIFICATION_EVENT_DISPLAY, -1); 时,它会返回给我-1。当我期望获得我之前投入的价值时。
  • 你检查过你的意图吗?也许eventToShow.valueAt(i).id 是-1

标签: android android-intent


【解决方案1】:

所以我研究了大约一天来修复那个错误,在这里我发现了什么。 我确信Android任务系统会让你头疼。 似乎如果 Android 决定您从 non-Activity context 调用您的意图 它可以用新的 Intent 替换。

startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK

这个intent 将替换您原来的intent,并且您不会捕获任何插入其中的数据。

您可以执行下一步来防止这种情况。在你的活动中你应该Override下一个方法:

@Override
public void onNewIntent(Intent intent) {
int eventId = intent.getIntExtra(MainActivity.NOTIFICATION_EVENT_DISPLAY, -1); 
}

现在你可以处理这些数据了

【讨论】:

    猜你喜欢
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多