Xamarin-Android Mvvmcross - 点击收到的通知启动应用程序与启动或带到前面

时间:2015-11-30 15:01:49

标签: android xamarin mvvmcross

我正在尝试为以下要求创建一个简洁的解决方案:

a)当用户点击'在我的应用收到通知且应用程序处于打开状态和/或后台的通知中,应用程序将被添加到字体中。

b)当用户点击'在通知上,应用程序关闭,启动画面显示,应用程序按正常情况启动。

我正在尝试,但我只能在上述任何一个选项中获得成功,而不是两个都不幸。这是我的代码:

    public void CreateNotification(string title, string desc, string pushUrl, string pushTitle)
    {
        var setupSingleton = MvxAndroidSetupSingleton.EnsureSingletonAvailable(ApplicationContext);
        setupSingleton.EnsureInitialized();

        if (!string.IsNullOrWhiteSpace(pushUrl))
        {
            var pushMessageParameterService = Mvx.Resolve<IPushMessageParameterService>();
            pushMessageParameterService.SetPushActionParameters(new PushActionParameters
            {
                UrlToShow = pushUrl,
                ViewTitle = pushTitle
            });
        }

        var intent = new Intent(this, typeof(SplashScreen));
        intent.AddFlags(ActivityFlags.NewTask);
        intent.SetAction(Intent.ActionMain);
        intent.AddCategory(Intent.CategoryLauncher);

        //var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);
        //var pendingIntent = PendingIntent.GetActivity(this, 0, intent, 0);
        var pendingIntent = PendingIntent.GetActivity(this, 0, intent.SetFlags(ActivityFlags.BroughtToFront), PendingIntentFlags.CancelCurrent);

        Uri alarmSound = RingtoneManager.GetDefaultUri(RingtoneType.Notification);

        var notificationBuilder = new Notification.Builder(this)
            .SetSmallIcon(Resource.Drawable.Icon)
            .SetContentTitle(title)
            .SetContentText(desc)
            .SetAutoCancel(true)
            .SetSound(alarmSound)
            .SetContentIntent(pendingIntent);

        var notificationManager = (NotificationManager)GetSystemService(Context.NotificationService);
        Notification notification = notificationBuilder.Build();
        notification.Flags = NotificationFlags.ShowLights | NotificationFlags.AutoCancel;

        notificationManager.Notify(0, notification);
    }

为了简单起见,我有两项活动:

public class SplashScreen : MvxSplashScreenActivity

public class DashboardView : BaseMvxActivity

如果我使用&#34; SplashScreen&#34;作为通知的PendingIntent,并且应用程序已经在后台启动/打开/挂起,它会挂起在splashScreen上。 MvvmCross日志记录显示&#34;显示ViewModel DashboardViewModel&#34;但到此为止。不调用OnCreate,Init和Start。飞溅只是停留。

如果我使用&#34; DashboardView&#34;作为通知的PendingIntent和应用程序已关闭/未激活,我只是在启动时看到白屏并且没有启动画面。

我想拥有两全其美的:)。因此,当点击推送消息并且应用程序处于打开状态时,只需将应用程序置于最前面(如果它还没有)。当应用程序关闭时,显示启动画面等等。

我希望我的问题清楚。

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

当我尝试将MvxSplashScreenActivity用于我的通知意图时,它会在该屏幕上冻结。

我指出标准的MvxActivity并自己设置背景,并在NoHistory = true属性上设置Activity。在我的待处理活动的OnCreate中,我开始了真正的意图。