Results 1 to 6 of 6

Thread: Signaal als App in slaap gaat of als deze wakker wordt (FMX Android)

  1. #1

    Signaal als App in slaap gaat of als deze wakker wordt (FMX Android)

    Als een App een tijdje niet gebruikt wordt, dan gaat het scherm uit en valt de App in de slaap stand.
    Later als de telefoon weer bediend wordt, gaat het scherm weer aan en komt de App uit de slaap stand.

    Nu zou ik graag op deze momenten een stukje code willen uitvoeren in mijn App.

    Ik vermoed dat ik dit af kan vragen in de powermanager, maar begrijp niet hoe ik dat zou moeten doen.
    Dus hoe zou ik dit af kunnen vragen? Zodat ik op die momenten iets kan uitvoeren in mijn App

  2. #2
    Het is niet zozeer de app, maar het hele OS dat in slaapstand gaat. Ik weet niet of je app daar een event van krijgt. Zo ja, dan vermoed ik dat dat WillBecomeInactive en BecameActive zullen zijn.
    1+1=b

  3. #3
    Ik heb nu dit, maar er gebeurd niets.
    Hoe krijg ik het voor elkaar dat de function HandleAppEvent uitgevoerd wordt ?


    Code:
    unit Unit1;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo.Types,
      FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo,
    
      FMX.Platform; //TBV TEST
    
    
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
      private
        { Private declarations }
      public
        { Public declarations }
        function HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.fmx}
    
    
    
    //------------------------------------------------------------------------------
    
    //https://stackoverflow.com/questions/28834798/how-can-i-keep-my-application-in-the-foreground
    function TForm1.HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;
    begin
      Memo1.Lines.Add('---');
      case AAppEvent of
        TApplicationEvent.FinishedLaunching: Memo1.Lines.Add('1 Finished Launching');
        TApplicationEvent.BecameActive: Memo1.Lines.Add('2 Became Active'); ///
        TApplicationEvent.WillBecomeInactive: Memo1.Lines.Add('3 Will Become Inactive'); ///
        TApplicationEvent.EnteredBackground: Memo1.Lines.Add('4 Entered Background');
        TApplicationEvent.WillBecomeForeground: Memo1.Lines.Add('5 Will Become Foreground');
        TApplicationEvent.WillTerminate: Memo1.Lines.Add('6 Will Terminate');
        TApplicationEvent.LowMemory: Memo1.Lines.Add('7 Low Memory');
      end;
      Result := True;
    end;
    
    //------------------------------------------------------------------------------
    
    end.
    Last edited by MMSoft; 22-Sep-21 at 13:25.

  4. #4
    Het is een event handler. Die moet getriggerd worden door een event, net zoals je een ButtonClick method (via de dfm) koppelt aan het OnClick event van een button.

    In de VCL heb je een TApplicationEvents component. Geen idee of dat in FireMonkey ook zo werkt, want ik heb nog nooit een FireMonkey app gemaakt...
    1+1=b

  5. #5
    Goed, even kijken..

    Blijkbaar is er niet zoiets als een TApplicationEvents componentje in FMX, maar gebruik je 'services' om bij bepaalde onderdelen van je applicatie-omgeving te komen.
    Je event handler zou je dan moeten zetten via een method in zo'n 'service interface'. Voor application events is dat:

    FMX.Platform.IFMXApplicationEventService.SetApplic ationEventHandler.

    IFMXApplicationEventService is een interface. Die moet je dus ergens vandaan zien te halen, d.w.z., je moet een object zien te vinden of maken dat die interface implementeert.
    Het linkje onderaan die pagina heeft het over platform services. Even kijken of dat uitlegt hoe die services werken..

    Op die pagina staat een voorbeeldje voor het Clipboard, dat, aangepast naar application events, er zo uit zou zien om je HandleAppEvent method te registreren:

    Delphi Code:
    1. var
    2.   ApplicationEventService: IFMXApplicationEventService;
    3. begin
    4.   if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, ApplicationEventService) then
    5.   begin
    6.     ApplicationEventService.SetApplicationEventHandler(HandleAppEvent);
    7.   end;
    8. end;

    Hopelijk werkt het zo, want ik weet niet hoe ik het moet testen
    Last edited by GolezTrol; 22-Sep-21 at 16:27.
    1+1=b

  6. #6
    Dat werkt !!!

    Bij de Opstart krijg ik dit:
    1 Finished Launching
    5 Will Become Foreground
    2 Became Active

    Als de App in Slaap valt:
    3 Will Become Inactive
    4 Entered Background

    Als ik de App wakker maak, krijg ik dit:
    5 Will Become Foreground
    2 Became Active

    Dus deze wil ik gaan gebruiken:
    Als de App start of wakker wordt: 2 Became Active
    Als de App in Slaap valt: 3 Will Become Inactive

    Bedankt !!!
    Last edited by MMSoft; 23-Sep-21 at 08:19.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •