MVVMCross ViewModel与Android服务进行通信

时间:2015-12-09 14:30:57

标签: xamarin xamarin.android android-service mvvmcross

我需要一些项目架构方面的帮助。 我无法了解ViewModel如何与Android服务进行通信。 我创建了一个可以调用某些平台函数的Inteface:

public interface IGeoLocationWatcher
{
    GeoLocation Location { get; set; }
    void StartLocationService();
    void StopLocationService();
}

在Android平台上我使用这个界面:

[Service]
public class DroidGeolocationWatcher : Service,
    Android.Gms.Common.Apis.GoogleApiClient.IConnectionCallbacks,
    Android.Gms.Common.Apis.GoogleApiClient.IOnConnectionFailedListener,
    Android.Gms.Location.ILocationListener,
    IGeoLocationWatcher 
{
    public GeoLocation Location { get; set; }
    public void StartLocationService();
    public void StopLocationService();
}

当我获得新位置时,我调用在ViewModel中订阅的自定义消息(事件)。 如果应用程序在后台运行,我会发送通知或在前台 - 我更新我的用户界面。

WeakSubscribe<GeoLocationChangedMessage> ((s)=> {
    Location = s;
    RaisePropertyChanged(() => Location);
});

但它似乎无法正常工作。我需要一些建议我做错了什么或另一种做法。

感谢您的关注。

1 个答案:

答案 0 :(得分:0)

subscribe方法返回类型为MvxValueEventSubscription<T>的标记您需要将该标记存储在视图模型的属性上,否则该标记可能会在您收到通知之前被处置。

如果您想停止接收通知,可以这样做:

if (this.token != null)
{
this.token.Dispose();
this.token = null;
}