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.
任何的想法?暗示?小费?:-)
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方法
| 归档时间: |
|
| 查看次数: |
1685 次 |
| 最近记录: |