2013-08-23 3 views
7

알림 서비스와 같은 것을 구현하는 플러그인을 만들고 싶습니다. 내가 지금하고 있어요 그래서MvvmCross와 함께 android에서 알림 사용

이 같은 것입니다 :

 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을 포장합니까? < ...>() -이 알림에 명령이 있습니까? 이것은 가능한가?

네이티브 안드로이드에서 내가 보여주고 자하는 내 활동을 가리키는 PendingIntent를 만들 것입니다.

아이디어가 있으십니까? 힌트? 팁? :-)

답변

7

Android의 기본 MvvmCross 발표자는 내비게이션에 Intent을 사용합니다. 이는 인터페이스의 Intent GetIntentFor(MvxViewModelRequest request) 메소드에 의해 생성됩니다. 기본적으로

이는 내 구현 : 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을하고이 인터페이스를 호출 당신 자신. MvxViewModelRequest 객체 생성에 대한 자세한 내용은

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

참조 또한 이런 식으로 뭔가가 V1에서 할 수 얼마나 알고 계십니까 MvxNavigatingObject.cs

+0

에서 오버로드 ShowViewModel 방법? – Jake