我需要一些项目架构方面的帮助。我无法了解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);
});
但它似乎无法正常工作。我需要一些建议我做错了什么或另一种方法。
感谢您的关注。
subscribe方法返回类型为MvxValueEventSubscription<T>
的标记您需要将该标记存储在视图模型的属性上,否则该标记可能会在您收到通知之前被处置。
如果你想停止接收通知,你可以这样做:
if (this.token != null)
{
this.token.Dispose();
this.token = null;
}