2011-08-31 26 views
1

我想提醒用戶在GPS無法使用GPS查找中捕獲錯誤(基本上,當他們有斷緣祿服務)如何在WP7

以下是我查找case語句和我「已經注意到,在模擬器中我打的‘’狀態,所以我不能返回一個錯誤在這裏,因爲它仍然工作正常

void MyStatusChanged(GeoPositionStatusChangedEventArgs e) 
    { 
     switch (e.Status) 
     { 
      case GeoPositionStatus.Disabled: 
       client.ClientCallBackWithError("fail"); 
       break; 
      case GeoPositionStatus.Initializing: 
       var y = "initializing location service,"; 
       break; 
      case GeoPositionStatus.NoData: 
       // The location service is working, but it cannot get location data 
       // Alert the user and enable the Stop Location button 
       var z = "data unavailable,"; 
       break; 
      case GeoPositionStatus.Ready: 
       var zzz = "receiving data, "; 
       break; 

     } 
    } 
我的呼喚頁/視圖我決定也許我可以等待內部

所以10秒鐘,看看這是否被擊中或不。我可以只是拋出一個錯誤/等

警告龐大的黑客,因爲我失去希望

private void FindByGps_Click(object sender, RoutedEventArgs e) 
    { 
     gpsStarted = false; 
     gpsEnded = false; 

     progressHelper.StartProgressStuff(this.progress); 
     gpsStarted = true; 
     gpsLocationLookupService.StartLocationService(); 
     this.Dispatcher.BeginInvoke(() => ListenForCallbackDuringGpsLookup(0)); 
    } 

    private object ListenForCallbackDuringGpsLookup(int counter) 
    { 
     if (gpsStarted && !gpsEnded && counter < 12) 
     { 
      //keep looking until the timer runs out ... 
      counter = counter + 1; 
      this.Dispatcher.BeginInvoke(() => SleepForASec()); 
      ListenForCallbackDuringGpsLookup(counter); 
     } 
     else if (gpsStarted && gpsEnded) 
     { 
      gpsStarted = false; 
      gpsEnded = false; 
     }else{ 
      this.Dispatcher.BeginInvoke(() => SetCurrentLocationAndLaunchFindKiosks(null, "Failed to locate you by GPS")); 
     } 

     return null; 
    } 

    private object SleepForASec() 
    { 
     Thread.Sleep(1000); 

     return null; 
    } 

但第二次我旋轉了一個線程,似乎直到線程的東西是完成鎖定應用程序。

所以我的問題 - 如何我應該陷入這種類型的GPS錯誤的東西,以提供正確的反饋?

+0

嗯,這只是模擬器中的一個問題? (即,您是否在真實設備上測試過?)並且您是否在使用7.1 SDK的模擬器具有內置GPS仿真? –

+0

有一個物理設備一個星期,但沒有測試這個深度,因爲我應該明顯。我將下拉7.1 SDK在那裏測試gps,但我打算最初發布7.0,所以我希望內置的gps比當前的SDK更好地工作 –

+0

7.1仿真器可以很好地適用於7.0應用程序。但是芒果在不到一個月的時間內就被髮布了,你必須趕緊在之前發佈它:p –

回答

1

你看這個API嗎?

http://msdn.microsoft.com/en-us/library/system.device.location.geocoordinatewatcher.trystart(v=VS.92).aspx

基於它說,在這裏,你應該能夠在以下範圍內做一些事情:

public partial class MainPage : PhoneApplicationPage 
{ 
    GeoCoordinateWatcher watcher; 

    // Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 
     Loaded += (source, args) => 
     { 
      watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High); 

      watcher.PositionChanged += (sender, e) => 
      { 
       // update the user 
      }; 

      watcher.StatusChanged += (sender, e) => 
      { 
       // update the user 
      }; 

      if (!watcher.TryStart(false, TimeSpan.FromSeconds(5))) 
      { 
       // show the error somewhere 
      } 
     }; 
    } 
} 

然後,應用程序的執行過程中,如果出現錯誤與GPS (丟失信號等),那麼你可以在StatusChanged事件處理程序中進行適當的響應。

讓我知道如果我不在這裏,我會不斷思考更好的解決方案...

+0

爲了記錄,這是芒果的版本。 7.0版本簡單地調用開始(和iirc,沒有Timeout參數)。 –

+0

我從http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=20558下載了7.0 SDK文檔,並驗證了這兩個版本都支持此API。 –

+0

有趣的 - 我將不得不實施這種方法,看看我是否可以在物理設備上驗證它!謝謝克里斯! –