在MvvmCross上使用Android上的通知

Ste*_*fan 8 mono android 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());
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Stu*_*art 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;
    }
Run Code Online (Sandbox Code Playgroud)

如果你需要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);
Run Code Online (Sandbox Code Playgroud)

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