通知并不总是启动活动

时间:2015-06-03 20:07:21

标签: android android-intent android-activity

每个标题,它并不总是启动活动。 输出日志中没有错误,只是说

  

06-01 16:46:36.924:I / ActivityManager(370):START u0 {flg = 0x10000000   CMP = com.myapp / md527315440e30c82eb86ffbe7caee6cb98.MyView   bnds = [96,712] [1056,840](有额外内容)}来自pid -1

我的意思是“并不总是”是这样的:

  1. 我启动应用程序,它显示主屏幕。收到通知,点击通知,运行活动。 App导航到另一个活动,此活动已关闭(调用finish())。
  2. 接下来,我点按后退按钮,直到应用关闭。收到通知,点击通知,运行活动。 App导航到另一个活动,此活动已关闭(调用finish())。
  3. 接下来,保持app处于相同状态(无导航)。收到通知,我点击通知,活动没有运行。
  4. 以下是添加通知的代码:

        void CreateNotification (Context context, PushNotification pn)
        {
            var builder = new NotificationCompat.Builder (context)
                .SetContentTitle (pn.Title)
                .SetContentText (pn.Body)
                .SetSmallIcon (Resource.Drawable.launcher)
                .SetLargeIcon (Android.Graphics.BitmapFactory.DecodeResource (context.Resources, Resource.Drawable.launcher))
                .SetSound (Android.Provider.Settings.System.DefaultNotificationUri)
                .SetAutoCancel (true);
    
            Android.Support.V4.App.TaskStackBuilder stackBuilder = Android.Support.V4.App.TaskStackBuilder.Create(context);
            stackBuilder.AddParentStack(Java.Lang.Class.FromType(typeof(LoginView)));
            stackBuilder.AddNextIntent(GetIntent());
    
            PendingIntent resultPendingIntent = stackBuilder.GetPendingIntent(0, (int)PendingIntentFlags.UpdateCurrent);
            builder.SetContentIntent(resultPendingIntent);
    
            var notificationManager = context.GetSystemService (Context.NotificationService) as NotificationManager;
            notificationManager.Notify(1, builder.Build());
        }
    
        static Intent GetIntent ()
        {
            // returns an intent
        }
    

    我看到了同样问题的其他问题,但没有解决方案有效。 如果有人可以提供一些提示或想法,为什么这可能不起作用。

1 个答案:

答案 0 :(得分:1)

查看"设置常规活动PendingIntent" android notifications的一部分。您没有遵循示例中列出的准则。特别是,您不能执行以下操作:

  

根据启动Activity的Intent创建一个后台堆栈:   创建Intent以启动Activity。通过创建堆栈构建器   调用TaskStackBuilder.create()。将后栈添加到堆栈   通过调用addParentStack()构建器。对于每个活动   您在清单中定义的层次结构,后端堆栈包含   启动Activity的Intent对象。此方法还添加了标志   在一个新任务中启动堆栈。注意:虽然参数为   addParentStack()是对已启动的Activity,方法的引用   call不会添加启动Activity的Intent。相反,那是   在下一步中得到照顾。

     

从通知中添加启动活动的Intent   调用addNextIntent()。传递您在第一步中创建的Intent   作为addNextIntent()的参数。如果需要,请添加参数   通过调用堆栈上的Intent对象   TaskStackBuilder.editIntentAt()。有时需要确保这一点   目标Activity在用户显示有意义的数据时   使用Back导航到它。获取此堆栈的PendingIntent   调用getPendingIntent()。然后,您可以使用此PendingIntent作为   setContentIntent()的参数。

抱歉格式化。我不确定如何保留网站上的原文。