2013-07-31 1 views
0

Я использую плагин MvvmCross Location. На некоторых устройствах успех MvxGeoLocation срабатывает, а на других он никогда не делает. Я видел другие подобные вопросы с ответами (MVVMCross IMvxGeoLocationWatcher Success Action never fires on Android). Однако это не работает на всех устройствах (перезагрузка), поэтому решение недействительно. Устройство, которое я тестирую прямо сейчас, находится на Android V 4.0.3, HTC Vivid. Клиент сообщает об этой же проблеме на своих устройствах. Ниже мой код LocationService, метод OnLocation никогда не запускается на этих устройствах.MvvmCross IMvxGeoLocationWatcher никогда не срабатывает MvxGeoLocation Успех

public class LocationService : ILocationService 
{ 
    private readonly IMvxGeoLocationWatcher _locationWatcher; 
    private readonly IMvxMessenger _messenger; 

    public double Latitude { get; set; } 
    public double Longitude { get; set; } 

    public bool HasLocation() 
    { 
     return (Latitude != 0.0 && Longitude != 0.0); 
    } 

    public LocationService(IMvxGeoLocationWatcher locationWatcher, IMvxMessenger messenger) 
    { 
     _locationWatcher = locationWatcher; 
     _messenger = messenger; 
     _locationWatcher.Start(new MvxGeoLocationOptions(){ EnableHighAccuracy = true}, OnLocation, OnError); 
    } 

    private void OnError(MvxLocationError error) 
    { 
     _messenger.Publish(new GpsUnavailableMessage(this)); 
    } 

    private void OnLocation(MvxGeoLocation location) 
    { 
     Latitude = location.Coordinates.Latitude; 
     Longitude = location.Coordinates.Longitude; 

     var message = new LocationMessage(this, location.Coordinates.Latitude, location.Coordinates.Longitude); 
     _messenger.Publish(message); 
    } 
} 

Вот сообщения, показываемые в LogCat, похоже ли это, что я получаю GPS-местоположение?

07-31 11:54:59.883: V/GpsLocationProvider(246): SV count: 9 ephemerisMask: 93d5 almanacMask: 93d5 
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 1 snr: 0.0 elev: 7.0 azimuth: 146.0 E A 
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 3 snr: 0.0 elev: 33.0 azimuth: 49.0 E A 
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 5 snr: 0.0 elev: 0.0 azimuth: 0.0 E A 
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 7 snr: 0.0 elev: 74.0 azimuth: 351.0 E A 
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 8 snr: 0.0 elev: 43.0 azimuth: 314.0 E A 
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 9 snr: 0.0 elev: 36.0 azimuth: 312.0 E A 
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 10 snr: 0.0 elev: 0.0 azimuth: 0.0 E A 
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 13 snr: 0.0 elev: 39.0 azimuth: 188.0 E A 
07-31 11:54:59.883: V/GpsLocationProvider(246): sv: 16 snr: 0.0 elev: 1.0 azimuth: 66.0 E A 

Значит, это проблема Mono для android? Следующий код не вызывает ILocationListener:

[Register("requestLocationUpdates", "(Ljava/lang/String;JFLandroid/location/LocationListener;)V", "GetRequestLocationUpdates_Ljava_lang_String_JFLandroid_location_LocationListener_Handler")] 
    public virtual void RequestLocationUpdates(string provider, long minTime, float minDistance, ILocationListener listener); 
+0

Не похоже, что это проблема с mvvm - похоже, что это просто андроид и/или Xamarin.Android - плагин mvx GPS - довольно тонкая обертка. – Stuart

+0

спасибо stuart .. вы правы, это была проблема xamarin .. пришлось полностью удалить, а затем установить xamarin.android 4.8 свежий .. проблема решена –

ответ

0

Это, как представляется, проблема с Xamarin.Android при обновлении. Деинсталляция Xamarin.Android полностью, а затем переустановка v 4.8 решила проблему.