How do I handle a back-button press in a (Delphi) Android app? How do I handle a back-button press in a (Delphi) Android app? android android

How do I handle a back-button press in a (Delphi) Android app?


In the form's OnKey... events, the Key parameter is vkHardwareBack on Android. For example:

uses  FMX.Platform, FMX.VirtualKeyboard;procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);var  FService : IFMXVirtualKeyboardService;begin  if Key = vkHardwareBack then  begin    TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));    if (FService <> nil) and (vksVisible in FService.VirtualKeyBoardState) then    begin      // Back button pressed, keyboard visible, so do nothing...    end else    begin      // Back button pressed, keyboard not visible or not supported on this platform, lets exit the app...      if MessageDlg('Exit Application?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbOK, TMsgDlgBtn.mbCancel], -1) = mrOK then      begin        // Exit application here...      end else      begin        // They changed their mind, so ignore the Back button press...        Key := 0;      end;    end;  end  ...end;


For future reference to anyone trying to make sense of this..

if Key = vkHardwareBack then    begin      // your code here      key := 0;end;

The key := 0; is the secret to stop the app from closing..

This goes in the forms OnKeyUp event


Here is an updated code for Remy's answer (works with Seattle):

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);var  FService : IFMXVirtualKeyboardService;begin  if Key = vkHardwareBack then  begin    TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));    if (FService <> nil) and (TVirtualKeyboardState.Visible in FService.VirtualKeyBoardState) then    begin      // Back button pressed, keyboard visible, so do nothing...    end else    begin      Key := 0;      // Back button pressed, keyboard not visible or not supported on this platform, lets exit the app...      MessageDlg('Exit Application?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbOK, TMsgDlgBtn.mbCancel], -1, OnCloseDialog);    end;  end;end;procedure TForm1.OnCloseDialog(Sender: TObject; const AResult: TModalResult);begin  if AResult = mrOK then    Close;end;