我确实想创建一个实现类似通知服务的插件。
所以我现在正在做的事情是这样的:
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。
有什么想法吗?暗示?小费? : - )
答案 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
方法