2013-07-17 31 views
0

我創建了一個非常簡單的測試應用程序,用於將當前經緯度的地理編碼反轉爲地址。MVVMCross IMvxGeoLocationWatcher成功動作絕不會在Android上觸發

這裏是我的ViewModel代碼:我OnLocation方法

namespace LoginProductsMVVM.Core.ViewModels 
{ 
    public class ProductDetailViewModel 
     : MvxViewModel 
    { 
     public void Init(Product product) 
     { 
      Product = product; 
     } 

     private Product _product; 
     public Product Product 
     { 
      get { return _product; } 
      set { _product = value; 
       RaisePropertyChanged (() => Product); } 
     } 

     private string _latitude; 
     public string Latitude{ 
      get { return _latitude; } 
      set { _latitude = value; RaisePropertyChanged(() => Latitude); } 
     } 

     private string _longitude; 
     public string Longitude{ 
      get { return _longitude; } 
      set { _longitude = value; RaisePropertyChanged(() => Longitude); } 
     } 

     private string _address; 
     public string Address{ 
      get { return _address; } 
      set { _address = value; RaisePropertyChanged(() => Address); } 
     } 

     private IMvxGeoLocationWatcher _watcher; 
     public IMvxGeoLocationWatcher Watcher 
     { 
      get 
      { 
       _watcher = Mvx.Resolve<IMvxGeoLocationWatcher>(); 
       return _watcher; 
      } 
     } 

     public ProductDetailViewModel(IMvxGeoLocationWatcher watcher) 
     { 
      _watcher = watcher; 
      _watcher.Start (new MvxGeoLocationOptions(), OnLocation, OnError); 
     } 

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

      // Android Location specific stuff 
      var activity = Mvx.Resolve<IMvxAndroidCurrentTopActivity>().Activity; 
      Geocoder geocdr = new Geocoder (activity.BaseContext); 

      IList<Address> addresses = geocdr.GetFromLocation (double.Parse(Latitude), double.Parse(Longitude), 1); 

      addresses.ToList().ForEach ((addr) => Address += addr.ToString() + "\r\n\r\n"); 
     } 

     void OnError (MvxLocationError error) 
     { 
      Mvx.Error ("Seen location error {0}", error); 
     } 
    } 
} 

我有一個破發點,但它從來沒有在那裏得到。我是否錯過了一些可以在Android上正常工作的東西?它似乎工作得很好,適用於iOS ...

回答

1

每Odahan here:

嗯...我研究多一點:這個問題是已知的,可以在許多設備上看到。這不是MvvmCross問題。簡短的回答:設備需要重新啓動,所有工作都像魅力一樣...... Google似乎發送了一些導致問題的更新。 這裏是一個線程談到這個問題以及有關地理編碼類一個類似:

https://code.google.com/p/android/issues/detail?id=38009

所以:可以關閉,MvvmCross是確定的,但其他人可以在這裏面對這個錯誤,所以我的解釋和鏈接。

+0

+1自己調查和張貼答案。 – Jacco

0

當你說它從來沒有激發'成功',實際上是否成功?

在GPS代碼中可能會出現很多錯誤 - 例如,您的應用可能沒有特權,您的手機可能會禁用A-GPS或GPS,或者您甚至可能在無位置模擬器上運行 - 所有這可能來自你的描述。

It'a還值得注意的是,Xamarin.Android有擊中斷點長期問題 - 所以最好是添加跟蹤,而不是依靠斷點打擊:/


也許嘗試運行雖然N = 8從http://mvvmcross.wordpress.com/ - 這有幫助嗎? (N = 9也是值得關注的,因爲它顯示了一個辦法,讓多的ViewModels使用geowatcher)

+0

成功從來沒有發生過(或者至少我不這麼認爲),因爲它從來沒有達到我的中斷點,也永遠不會更新我的經緯度。我正在打開位置的物理設備上運行。我啓用了以下權限:AccessCoarseLocation,AccessNetworkState,Internet。我將不得不檢查N = 8是否在設備上工作! – PkL728

+0

交叉引用https://github.com/slodge/MvvmCross/issues/360 - 奇怪的是,2人在同一天看到相同的問題 - 但我可以確認代碼仍然似乎在我的模擬器和我的工作測試設備 - 所以感覺就像你的經驗可能是由於一些Android設備的差異 – Stuart

相關問題