Search code examples
androidiosdelphidelphi-xe8

How to get app resume state on iOS and Android?


Is there something that can be checked from code point of view when an App is resumed on iOS and Android?

e.g. when an app gets minimized and restored (app is still running in background of device).


Solution

  • You need to use IFMXApplicationEventService to register a callback where the application will be notified:

    uses FMX.Types, FMX.Platform;
    
    function TForm1.HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;
    begin
      case AAppEvent of
        TApplicationEvent.FinishedLaunching:    Log.d('Launched.');
        TApplicationEvent.BecameActive:         Log.d('Gained focus.');
        TApplicationEvent.EnteredBackground:    Log.d('Now running in background.');
        TApplicationEvent.WillBecomeForeground: Log.d('Restoring from background.');
        TApplicationEvent.WillBecomeInactive:   Log.d('Going to lose focus.');
        TApplicationEvent.WillTerminate:        Log.d('Quitting the application.');
        TApplicationEvent.LowMemory:            Log.d('Device running out of memory.');
    
        // iOS only
        TApplicationEvent.TimeChange:           Log.d('Significant change in time.');
        TApplicationEvent.OpenURL:              Log.d('Request to open an URL.');
      end;
    
      Result := True;
    end;
    
    procedure TForm11.FormCreate(Sender: TObject);
    var
      aFMXApplicationEventService: IFMXApplicationEventService;
    begin
      if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService,
        IInterface(aFMXApplicationEventService))
      then
        aFMXApplicationEventService.SetApplicationEventHandler(HandleAppEvent)
      else
        Log.d('Application Event Service not supported.');
    end;
    

    More info about the event types here.

    A good article on the subject by Paweł Głowacki (for Delphi XE5, but still useful).