2013-08-23 8 views
7

Ich möchte ein Plugin erstellen, die so etwas wie eine Benachrichtigung-Service implementiert.Verwenden von Benachrichtigungen auf Android mit MvvmCross

Also, was ich im Moment mache ist so etwas wie dieses:

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

Dies funktioniert gut und zeigt die Meldung, wie es zeigen sollte. Der nächste Schritt ist, dass ich von der Benachrichtigung zu meiner Aktivität navigieren möchte. Was bedeutet, dass ich in MvvmCross zu meinem ViewModel navigieren möchte.

Aber wie packe ich jetzt das ShowViewModel < ...>() - Befehl in diese Benachrichtigung? Ist das überhaupt möglich?

Auf nativen Android würde ich einen PendingIntent erstellen, der auf meine Aktivität zeigt, die ich zeigen möchte.

Irgendeine Idee? Hinweis? Spitze? :-)

Antwort

7

Der Standard-MvvmCross-Moderator für Android verwendet Intent s für die Navigation. Diese werden mit der Methode Intent GetIntentFor(MvxViewModelRequest request) in der Schnittstelle IMvxAndroidViewModelRequestTranslator generiert.

Standardmäßig ist diese implementiert innerhalb von: 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; 
    } 

Wenn Sie Intent s für andere Zwecke zu generieren (zB um dann zu gehen und PendingIntent s erzeugen), dann können Sie Resolve und rufen Sie diese Schnittstelle dich selber.

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); 

Für weitere Informationen MvxViewModelRequest Objekte zu erzeugen, auch die überladenen ShowViewModel Methoden in MvxNavigatingObject.cs

+0

Wissen Sie, wie so etwas in V1 geschehen würde? – Jake

Verwandte Themen