MVVMCross ViewModel与Android服务进行通信

问题描述 投票:0回答:1

我需要一些项目架构方面的帮助。我无法了解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);
});

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

感谢您的关注。

xamarin xamarin.android android-service mvvmcross
1个回答
0
投票

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

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

if (this.token != null)
{
this.token.Dispose();
this.token = null;
}
© www.soinside.com 2019 - 2024. All rights reserved.