通知点击行为取决于应用的状态

时间:2016-02-10 09:05:32

标签: android android-intent

经过长时间的搜索,我无法找到我需要的东西。

我只想:当向用户显示通知时,如果应用程序只是在后台,我想重新打开MainActivity。但是如果app / activity被杀了,我想完全重启应用程序。

我的实际代码:

   NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.notification_icon)
                        .setContentTitle(notification.getSubject())
                        .setContentText(notification.getMessage())
                        .setSound(Settings.System.DEFAULT_NOTIFICATION_URI);


        mBuilder.setContentIntent(
                PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class)
                        .setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), PendingIntent.FLAG_UPDATE_CURRENT));

        NotificationManager mNotificationManager =
                (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

        Notification notif = mBuilder.build();
        notif.flags = Notification.DEFAULT_VIBRATE | Notification.FLAG_AUTO_CANCEL;

实际上无法正常工作的情况是,如果应用或活动被杀,则重新启动应用。

编辑:杀了我的意思是应用程序经理关闭了应用程序。或者我们失去了焦点,活动被破坏了。在这些情况下,我想完全重启应用程序。

2 个答案:

答案 0 :(得分:0)

我认为你并不完全了解android的功能。每当需要你的程序时,程序都是由android启动的(请参阅Application类,了解你可以覆盖的onCreate)。

每当需要某项活动时,都会(重新)创建或将其带到前台。

这意味着重新启动活动并不一定意味着重新启动应用程序。实际上,如果程序仍在内存中,则不会发生应用程序重启。

如果您想进一步调查

  1. 创建一个Application.onCreate方法,以便查看您的应用是否重新启动。
  2. 触发通知
  3. 转到android设置,应用程序选项卡,然后选择'show cached processes'。从列表中清除您的流程。
  4. 点按通知。
  5. 这应该会触发应用程序的重启。如果这确实是问题,那么你就无法“解决”它。 Android决定什么时候它会杀死你的应用程序以及何时从内存中删除它。

    然后,最好的解决方案是重新设计您的活动,无论应用程序重启将触发什么,也会在活动本身中执行。或者,如果没有更详细的信息,您希望在“活动/应用程序重新启动”中执行哪些功能,则很难就此问题提供进一步的建议。

答案 1 :(得分:0)

我认为您需要将setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)值更改为setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)

  

原因是由于FLAG_ACTIVITY_REORDER_TO_FRONT的方式   作品。当您使用此标志时,Android会查找该实例   活动堆栈中的所需活动,从前面开始   堆栈和扫描,直到它到达堆栈的根/后面。如   一旦找到指定活动的实例,它就会带来   一个到前面(即:如果有多个指定的实例   它将把最新的实例带到前面。

原创我发现了here。 请参阅android developer doc here

我希望它对你有所帮助。