2017-05-22 5 views
0

Ich habe eine Prototyp-Anwendung, die Geofencing in AndroidStudio eingerichtet verwendet und erfolgreich im Android-Emulator testen konnte. Da ich die Anwendung auch als iOS verwenden muss, habe ich den Prototyp auf Xamarin/Visual Studio 2017 portiert, um sicherzustellen, dass er in dieser Umgebung funktioniert. So kann ich mich davor retten, die Kernlogik der App in Android und iOS codieren zu müssen. Allerdings kann ich die Geofences in der Xamarin-basierten App auf dem gleichen Emulator nicht auslösen. Hat jemand mit dieser Technologie in Xamarin gearbeitet? Gibt es spezielle Einstellungen, die für Xamarin geändert werden müssen, damit dies funktioniert?Testen von Xamarin Geofence-Prototyp im Emulator schlägt fehl

+0

Did ein echtes Gerät ausprobieren? funktioniert es? Nur um Code-Probleme zu verwerfen ... – xleon

+0

Im Emulator können Sie versuchen mit Einstellungen> Ort> Modus> Hohe Genauigkeit – xleon

+0

Ich arbeite daran, es auf einem echten Gerät zu testen, nur um sicherzustellen, dass. Im Emulator habe ich den Modus auf High Accuracy gesetzt und es hat die Ergebnisse nicht verändert. – tanzencoder

Antwort

0

Das Problem stammt wahrscheinlich aus dem Manifest. Wenn Sie in Xamarin einen Service (oder Intent-Service) erstellen, sollte dieser mit dem Attribut [Service] markiert werden, anstatt ihn manuell in das Manifest einzufügen.

Sie auch auf Fehler überprüfen sollten, wenn die Absicht der Handhabung (falls Sie es nicht bereits tun):

[Service] 
public class GeofenceTransitionsIntentService : IntentService, IEnableDatabaseLogger 
{ 
    public GeofenceTransitionsIntentService() 
     : base(nameof(GeofenceTransitionsIntentService)) { } 

    protected override void OnHandleIntent(Intent intent) 
    { 
     base.OnHandleIntent(intent); 

     this.Log().Info("Intent received"); 

     var geofencingEvent = GeofencingEvent.FromIntent(intent); 
     if (geofencingEvent.HasError) 
     { 
      var errorMessage = GeofenceErrorMessages.GetErrorString(this, geofencingEvent.ErrorCode); 
      this.Log().Error(errorMessage); 

      return; 
     } 

     var geofenceTransition = geofencingEvent.GeofenceTransition; 
     var geofences = geofencingEvent.TriggeringGeofences; 
     var location = geofencingEvent.TriggeringLocation; 

     if (geofenceTransition == Geofence.GeofenceTransitionEnter) 
     { 
      foreach (var geofence in geofences) 
       this.Log().Info($"Entered {geofence.RequestId} at {location.Latitude}/{location.Longitude}"); 

      // do something 
     } 
     else if (geofenceTransition == Geofence.GeofenceTransitionExit) 
     { 
      foreach (var geofence in geofences) 
       this.Log().Info($"Exited {geofence.RequestId} at {location.Latitude}/{location.Longitude}"); 

      // do something 
     } 
     else 
     { 
      this.Log().Error($"Geofence transition invalid type: {geofenceTransition}"); 
     } 
    } 
} 

Hier ist eine Demo (in Betrieb) Projekt, das ich vor kurzem tat https://github.com/xleon/geofencing-playground Sie

+0

Danke für den POC, das hat mir zumindest geholfen zu isolieren, dass etwas mit dem Emulator und meiner Lösung nicht stimmt. Ihre Lösung funktionierte nicht auf meinem Emulator, aber es funktionierte auf einem Gerät, das ich bisher nicht ausführen konnte. Ich werde deinen Code analysieren, um zu sehen, wie es anders ist. Hoffentlich kann ich in der Zwischenzeit herausfinden, was mit meinen Emulatoren nicht stimmt. – tanzencoder

+0

Mein POC funktionierte nicht im Emulator, bis ich den Einstellungsortmodus auf Hohe Genauigkeit geändert habe. – xleon

+0

Verwenden Sie den Android Emulator oder den Visual Studio Emulator für Android? – tanzencoder

Verwandte Themen