android - 通过 MvvmCross 在 Android 上使用通知

标签 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());

这工作正常并且确实显示了它应该显示的通知。 下一步是,我想从通知导航到我的 Activity 。这意味着在 MvvmCross 中我确实想导航到我的 ViewModel。

但是我现在如何将 ShowViewModel<...>()-Command 打包到这个通知中?这可能吗?

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

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

最佳答案

Android 上默认的 MvvmCross 演示器使用 Intent 进行导航。这些由 IMvxAndroidViewModelRequestTranslator 接口(interface)中的方法 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;
    }

如果您需要为其他目的生成Intent(例如,为了继续生成PendingIntent),那么您可以Resolve 并自己调用这个接口(interface)。

    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 方法|

关于android - 通过 MvvmCross 在 Android 上使用通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18402448/

相关文章:

c# - 接口(interface)继承多个接口(interface) : how is this handled by a C# compiler?

c#-4.0 - C# HPC - MPI 和 OpenMP

xamarin.ios - MvvmCross MvxFormFactorSpecific iPad/iPhone 属性

ios - 使用 Mvvmcross 将分组数据绑定(bind)到 Xamarin 中的 UITableview

android - 为什么 Android Studio 2.0 不支持 Perforce?

带有更改文本的 Android 小部件

c# - Mono 上的 WebSocket 证书(Mac,C#)

android - MVV交叉: Pass an enum value as a CommandParameter for Android

android - 如何将 SQLite 数据库嵌入到应用程序中?

android - Google App Engine - 数据存储读取操作过多