【问题标题】:Using Notifications on android with MvvmCross通过 MvvmCross 在 android 上使用通知
【发布时间】:2013-08-23 12:07:00
【问题描述】:

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

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

        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。

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

【问题讨论】:

    标签: android mono mvvmcross


    【解决方案1】:

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

    默认情况下这是在: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;
        }
    

    如果您需要生成Intents 用于其他目的(例如为了继续生成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.cs 中的重载ShowViewModel 方法

    【讨论】:

    • 你知道在 V1 中会如何做这样的事情吗?
    猜你喜欢
    • 2018-12-15
    • 2016-05-31
    • 2017-02-22
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多