2013-08-23 5 views
7

Desidero creare un plug-in che implementa qualcosa come un servizio di notifica.Utilizzo di notifiche su Android con MvvmCross

Quindi quello che sto facendo in questo momento è qualcosa di simile:

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

Questo funziona bene e non mostra la notifica come dovrebbe mostrare. Il passo successivo è che voglio passare dalla notifica alla mia attività. Il che significa che in MvvmCross voglio navigare sul mio ViewModel.

Ma come faccio a confezionare ShowViewModel < ...>() - Comando in questa notifica? È possibile?

Su Android nativo vorrei creare un PendingIntent che punta alla mia attività che voglio mostrare.

Qualche idea? Suggerimento? Mancia? :-)

risposta

7

Il presentatore MvvmCross predefinito su Android utilizza Intent s per la navigazione. Questi sono generati dal metodo Intent GetIntentFor(MvxViewModelRequest request) nell'interfaccia IMvxAndroidViewModelRequestTranslator.

Per default è attuato entro: 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; 
    } 

Se è necessario generare Intent s per altri scopi (ad esempio, per poi andare avanti e generare PendingIntent s) allora si può Resolve e chiamare questa interfaccia te stesso.

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

Per ulteriori informazioni sulla generazione MvxViewModelRequest oggetti, puoi anche consultare i sovraccarichi ShowViewModel metodi in MvxNavigatingObject.cs

+0

Sai come qualcosa come questo sarebbe stato fatto in V1? – Jake