2016-07-21 6 views
2

Ich arbeite an Inaktivität Erkennung.Xamarin.Forms gleichbedeutend mit überschreiben iOS SendEvent

Ich habe erfolgreich in iOS durch Unterklasse UIApplication und überschreiben SendEvent wie beschrieben here.

Ich weiß, dass ich dies sowohl für iOS als auch für Android separat implementieren könnte, aber ich möchte lieber einen plattformübergreifenden Formularansatz verwenden, indem ich alle Berührungsereignisse abfange und meine Timer zurücksetze. Ich würde auch keinen Touch-Event-Handler für alle meine Seiten hinzufügen müssen.

Antwort

2

Ich konnte keinen Cross-Plattform-Ansatz finden. Dies konnte ich erreichen, indem ich die zeitgeberbezogenen Informationen im Core-Formular-Projekt beließ und die Touch-Event-Handler getrennt für iOS und Android implementierte. Ich habe die iOS-Touch-Ereignisse wie im Link im OP beschrieben behandelt, aber für Android habe ich den Ansatz der Unterklasse Activity aufgrund der Anwesenheit der OnUserInteraction()-Methode angenommen.

Ursprünglich dachte ich, ich müsste Xamarin zwingen, meine Unterklasse Activity für alle Seiten zu verwenden, die ich in Xamarin verwende, aber ich habe mich geirrt. AdamMeaney über die Xamarin Foren war in der Lage zu helfen, eine Lösung für die Android-Seite der Dinge in Bezug auf Unterklassen einer Android-Aktivität zu bieten. Wie sich herausstellt, verwendet Xamarin nur einen Activity, der von Xamarin.Forms.Platform.Android.FormsAppCompatActivity erbt. Ich habe die MainAcitivty von Xamarin im Droid-Projekt zur Verfügung gestellt. Von dort überschreibt die OnUserInteraction() erwiesen sich als recht einfach sein:

public override void OnUserInteraction() 
{ 
    base.OnUserInteraction(); 
    //Do other stuff 
} 
0

Es scheint mir, dass alles, was Sie wirklich auf der Plattformseite tun müssen, benachrichtigt wird, sobald ein neues Berührungsereignis auftritt. Wenn ich etwas nicht verpasse, kann es sein, dass Sie den gesamten Timer im PCL-Core-Forms-Projekt ausführen und diesen Code aus dem plattformspezifischen Code aufrufen können, der ausgeführt wird, wenn eine Berührung erkannt wird.

Also wenn auf Android (ich habe nicht verifiziert, aber ich würde so annehmen) gibt es eine ähnliche Möglichkeit, jede Berührung, Gerät weit zu behandeln, dann scheint es, dass alles, was Sie tun müssen, implementieren diese Ereignishandler, als Sie haben dies für iOS getan und rufen Ihren Forms-Hauptcode auf, um mit den Timern fertig zu werden.

Zur Verdeutlichung: Auf der Plattformseite müssen Sie nur die Touch-Ereignisse global behandeln und dann im Forms-Core Code aufrufen, sodass Sie die Timer-Funktion nur einmal implementieren müssen. Oder so scheint es, wenn ich nicht etwas verpasse.

Wenn Sie eine Feature-Anfrage für Xamarin Formular machen wollen, tun Sie dies bitte bei Xamarin Benutzersprach Seite: xamarin.uservoice.com

ich Forms vermuten würde einfach wie oben beschrieben zu tun ... Gerät Griff Breite Berührungen auf jeder Plattform und dann eine virtuelle Methode im Forms-Core-Code, der aufgerufen wird, sobald eine Berührung auftritt.

+0

Ja, das ist der Ansatz, den ich nehmen werden soll ich so tun müssen. Ich hatte gehofft, dass es eine Methode geben würde, die ich in Forms überschreiben könnte, die Berührungsereignisse für alle Plattformen handhabt, anstatt auf die plattformspezifischen Berührungsereignishandler zu springen. –

Verwandte Themen