【问题标题】:MVVMCross ViewModel communicate with Android ServiceMVVMCross ViewModel 与 Android Service 通信
【发布时间】:2015-12-09 14:30:56
【问题描述】:

我需要一些有关项目架构的帮助。 我不明白 ViewModel 如何与 Android 服务通信。 我创建了一个可以调用一些平台函数的接口:

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 中订阅的自定义消息(事件)。 如果应用在后台运行,我会发送通知,或者在前台运行时 - 我会更新我的 UI。

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

但它似乎不起作用。我需要一些建议我做错了什么或另一种方法。

感谢您的关注。

【问题讨论】:

    标签: xamarin xamarin.android android-service mvvmcross


    【解决方案1】:

    subscribe 方法返回一个MvxValueEventSubscription&lt;T&gt; 类型的令牌,您需要将该令牌存储在您的视图模型的属性中,否则该令牌可能会在您收到通知之前被处置。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-14
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多