Global Touch erkennen

  • Xamarin.Forms

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Global Touch erkennen

    Hallo Leute

    Ich entwickle gerade eine kleine Mini-App in welcher Kunden sich kurzinfos zum Ausgestellten Fahrzeug anzeigen lassen können.
    an der Front habe ich eine TabPage mit mehreren Tabs und auch Popups können geöffnet werden, sowie die Navigation zu 2-3 ContentPages.

    Nun möchte ich einen Timer integrieren welcher nach z.b. 1 Minute inaktivität dann alle Pages welche offen sind schliesst und wieder auf die erste TabPage geht. Wie ich das mache weis ich bzw. habe ich sicher relativ schnell gefunden.

    Das Problem ist nur das ich nicht weis ob und wenn wie (bzw. ob dies unter Xamarin.Forms überhaupt möglich ist oder ob man das direkt unter Android machen muss) ich nun z.b. von der App.cs aus das Event bekomme um den timer immer wieder zurücksetzen zu können. Also das ich es mitbekomme wenn ein Touch-Befehl erkannt wurde.

    Besten Dank im Voraus
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Du wirst das wohl "nativ" lösen müssen. Also via MessagingCenter.

    Unter UWP musst du dich in das PointerPressed Event des CoreWindow einhaken und kannst dann bei jedem Klick oder Tap eine Message abschicken:
    stackoverflow.com/questions/31…-on-windows-universal-app

    unter Android musst du die OnUserInteraction() in MainActivity überschreiben und kannst dann bei jedem Touch eine Message abschicken.

    Unter iOS könnte dies eventuell hilfreich sein:
    pranavkhandelwal.com/blog/2015…yidle-time-for-xamarinios
    Anstatt da was mit nem Idle-Timer zu machen, sendest du bei jedem Touch via MessagingCenter eine Message.

    In deiner App.cs in der zentralen Library abbonierst du dann die Message und bekommst immer mit, sobald ein User irgendetwas antippt. Selbst leeren Raum.
    Besten Dank @EaranMaleasi für den ausführlichen Post.

    Top. Im Moment arbeite ich nur unter Android - war also einfach.
    Für die Nachwelt hier meine Solution:

    In der MainActivity:

    C#-Quellcode

    1. public override void OnUserInteraction()
    2. {
    3. base.OnUserInteraction();
    4. MessagingCenter.Send(Xamarin.Forms.Application.Current,"UserActivity");
    5. }


    Und in meiner MainPage (TabbedPage):

    C#-Quellcode

    1. public partial class MainPage : TabbedPage
    2. {
    3. private DateTime lastActivity;
    4. public MainPage()
    5. {
    6. InitializeComponent();
    7. lastActivity = DateTime.Now;
    8. Device.StartTimer(TimeSpan.FromSeconds(5), CheckInactivity);
    9. MessagingCenter.Subscribe<Application>(this, "UserActivity", (sender) =>
    10. {
    11. lastActivity = DateTime.Now;
    12. });
    13. }
    14. bool CheckInactivity()
    15. {
    16. if ((DateTime.Now - lastActivity).TotalMinutes >= 1)
    17. {
    18. Device.BeginInvokeOnMainThread(() =>
    19. {
    20. SelectedItem = Children.First();
    21. lastActivity = DateTime.Now;
    22. });
    23. }
    24. return true;
    25. }
    26. }



    Eigentlich super einfach 8-)
    Ich muss sagen das ich schon gefallen daran finde. Muss in Sachen MVVM noch gucken wie ich das am besten mache mit einem Server für Navigation, DisplayAlert usw um MVVM Konform zu bleiben, aber sonst finde ich Xamarin.Forms bis jetzt TOP!

    Danke dir. :thumbsup:

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##