8

我确实想创建一个插件来实现通知服务之类的功能。

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

        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<...>()-Command 打包到此通知中?这甚至可能吗?

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

任何想法?暗示?小费?:-)

4

1 回答 1

8

Android 上默认的 MvvmCross 演示器使用Intents 进行导航。这些是由接口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为其他目的生成 s(例如,为了继续生成PendingIntents),那么您可以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.csShowViewModel中的重载方法

于 2013-08-23T17:16:24.323 回答