Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

How can I make my Android app react to the back-button?

Is there something as high-level VCL's TApplicationEvents to handle it, or do I need to dive deep into low-level Android-specific stuff here?

Right now, most of the demo applications have an on-screen back button to go back to a previous screen. Pressing the psysical button always seems to quit the app, and in some situations it results in an access violation.

like image 973
Wouter van Nifterick Avatar asked Sep 12 '13 21:09

Wouter van Nifterick


2 Answers

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;
like image 111
Remy Lebeau Avatar answered Sep 27 '22 17:09

Remy Lebeau


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

like image 25
Jean-Michele Groenewald Avatar answered Sep 27 '22 17:09

Jean-Michele Groenewald