2011-01-14 9 views
2

Ich habe eine GPS-Klasse für Windows Phone 7, die ich aus dem MSDN bekam.Verwendung von GPS-Klassen Ereignisse in anderen Klassen

public class GetGPS : GeoCoordinateWatcher 
    { 
     GeoCoordinateWatcher watcher; 
     public float longitude { get; set; } 

     public GetGPS() 
     { 
      watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High); 
      watcher.MovementThreshold = 20.0; 
      watcher.PositionChanged += watcher_PositionChanged; 
      watcher.StatusChanged += this.watcher_StatusChanged; 
      watcher.Start(); 
     } 

     public void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e) 
     { 
      switch (e.Status) 
      { 
       case GeoPositionStatus.Initializing: 
        break; 
       case GeoPositionStatus.Ready: 
        //plingpling 
        break; 
       case GeoPositionStatus.Disabled: 
        // location is unsupported on this device 
        break; 
       case GeoPositionStatus.NoData: 
        //pling 
        break; 
      } 
     } 
     public void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e) 
     { 
      Debug.WriteLine(String.Format("***POSITION: {0}, {1}", e.Position.Location.Latitude, e.Position.Location.Longitude)); 
      Helfer.myLocation = e.Position.Location; 
     } 

    } 

Wenn ich versuche, diese Klasse zu verwenden, in meinem Programm bekomme ich nie die tatsächliche Position, in der ich bin - ich diese Position nach dem Programm für einige Zeit lief - ich denke, ich verantwortlich die asynchrone Ausführung halten kann dafür.

Wenn ich jedoch den GetGPS Konstruktor direkt in der Klasse implementiere wo ich den GPS brauche (und den Watcher in dieser Klasse auch definiere ...) bekomme ich was ich will - aber da muss ich die GPS Position holen einige Teile in meinem Programm Ich dachte, es wäre am besten, diese Funktionalität in eine Klasse auszulagern (DRY-Prinzip).

Wie kann ich eine Instanz von GetGPS in einer Klasse "test" erstellen, die die Objekte StatusChanged und PositionChanged implementiert - oder beobachtet?

Wenn ich einen Event Listener in dieser Klasse erstellen könnte ... könnte ich meine gewünschte Funktionalität bekommen :).

+0

Ich gehe davon aus, dass dies eine Untermenge Ihres Codes ist, weil 'Helfer.myLocation' nicht definiert ist. – Nate

+0

Ja, Helfer.MyLocation ist eine Grube - es hält die Geoposition - sobald ich ein GPS Fix habe. – theXs

+2

Warum ist GetGPS Unterklasse von GeoCoordinateWatcher? Was ist der Punkt? – Pedro

Antwort

1

Wenn Sie erwarten, dass sich die GPS-Position während der Ausführung Ihrer Anwendungen häufig ändert und Sie Echtzeit-Updates benötigen, fügen Sie Ihrer Klasse einfach eine öffentliche Eigenschaft mit der Bezeichnung CurrentLocation hinzu und legen Sie ihren Wert in der PositionChanged Ereignis. Dann behalten Sie einen globalen Verweis auf eine Instanz Ihrer Klasse GetGPS, und wann immer Sie auf den Standort zugreifen müssen, verwenden Sie die CurrentLocation-Eigenschaft.

+0

Aber wenn ich das tue, kann ich keine Positionsänderungen erhalten, die auftreten, während sich jemand bereits in einem Teil der Anwendung befindet, der die GPS-Position verwendet. – theXs

+0

Ja, das kannst du, weil das 'PositionChanged'-Ereignis den 'Helfer.myLocation' weiterhin aktualisiert, bis' watcher.Stop(); 'aufgerufen wird. Somit wird jedes Mal, wenn Sie den Wert von "Helfer.myLocation" überprüfen, die aktuellste verfügbare GPS-Position angezeigt. – Nate

Verwandte Themen