2013-08-23 21 views
7

Bir bildirim servisi gibi bir şey uygulayan bir eklenti oluşturmak istiyorum. Şu anda yapıyorum PekiMvvmCross ile android üzerinde Bildirimleri Kullanma

böyle bir şeydir:

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

Bu iyi çalışır ve bunu göstermelidir olarak bildirim göstermektedir. Bir sonraki adım, bildirimde etkinliğime gitmek istiyorum. Hangi MvvmCross içinde ViewModel benim gezinmek istiyorum demek.

Ancak şimdi nasıl ShowViewModel < ... paketini paketlerim? Bu mümkün mü?

Yerel android üzerinde, göstermek istediğim Etkinliğimi işaret eden bir PendingIntent oluşturur.

Herhangi bir fikrin var mı? İpucu? Bahşiş? :-)

cevap

7

Android'deki varsayılan MvvmCross sunucusu, navigasyon için Intent s kullanıyor. Bunlar, IMvxAndroidViewModelRequestTranslator arabirimindeki Intent GetIntentFor(MvxViewModelRequest request) yöntemiyle oluşturulur. Varsayılan olarak

bu dahilinde uygulanır: 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; 
    } 

başka amaçlar için Intent s oluşturmak gerekirse (örneğin daha sonra gidip PendingIntent s üretmek için) daha sonra yapabilirsiniz Resolve ve bu arayüzü çağrı kendin. MvxViewModelRequest objelerin üretimi konusunda daha fazla bilgi için

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

, bakınız ayrıca böyle bir şey V1 yapılması nasıl biliyor musunuz MvxNavigatingObject.cs

+0

içinde aşırı ShowViewModel yöntemleri? – Jake

İlgili konular