在MvvmCross上使用Android上的通知

时间:2013-08-23 12:07:00

标签: android mono mvvmcross

我确实想创建一个实现类似通知服务的插件。

所以我现在正在做的事情是这样的:

        var activity = Mvx.Resolve<IMvxAndroidCurrentTopActivity>().Activity;
        var builder = new NotificationCompat.Builder(activity.ApplicationContext)
            .SetContentTitle(title)
            .SetSmallIcon(Resource.Drawable.Icon)
            .SetContentText(message);
        var notificationManager = (NotificationManager)activity.ApplicationContext.GetSystemService(Context.NotificationService);
        notificationManager.Notify(0, builder.Build());

此工作正常,并显示应显示的通知。 下一步是,我想从通知导航到我的活动。这意味着在MvvmCross中我想导航到我的ViewModel。

但是,我现在如何将ShowViewModel&lt; ...&gt;() - 命令打包到此通知中?这甚至可能吗?

在原生android上,我会创建一个PendingIntent,它确实指向我要显示的Activity。

有什么想法吗?暗示?小费? : - )

1 个答案:

答案 0 :(得分:8)

Android上的默认MvvmCross演示者使用Intent进行导航。这些是由Intent GetIntentFor(MvxViewModelRequest request)界面中的方法IMvxAndroidViewModelRequestTranslator生成的。

默认情况下,这是在MvxAndroidViewsContainer.cs#L117

中实施的
    public virtual Intent GetIntentFor(MvxViewModelRequest request)
    {
        var viewType = GetViewType(request.ViewModelType);
        if (viewType == null)
        {
            throw new MvxException("View Type not found for " + request.ViewModelType);
        }

        var converter = Mvx.Resolve<IMvxNavigationSerializer>();
        var requestText = converter.Serializer.SerializeObject(request);

        var intent = new Intent(_applicationContext, viewType);
        intent.PutExtra(ExtrasKey, requestText);

        AdjustIntentForPresentation(intent, request);

        intent.AddFlags(ActivityFlags.NewTask);
        return intent;
    }

如果您需要为其他目的生成Intent(例如,为了继续生成PendingIntent),您可以Resolve并自行调用此界面。

    var request = MvxViewModelRequest<MyViewModel>.GetDefaultRequest();
    request.PresentationValues = new Dictionary<string, string>() {
       { "life", "42" }
    };
    var translator = Mvx.Resolve<IMvxAndroidViewModelRequestTranslator>();
    var intent = translator.GetIntentFor(request);
    var pending = PendingIntent.GetActivity (context, 0, intent, 0);

有关生成MvxViewModelRequest个对象的详细信息,另请参阅MvxNavigatingObject.cs中重载的ShowViewModel方法