Как мне обрабатывать нажатие кнопки «Назад» в приложении для Android (Delphi)?

Как заставить приложение Android реагировать на обратную кнопку?

Есть ли что-то вроде TApplicationEvents на высоком уровне для VCL, или мне нужно глубоко погрузиться в низкоуровневые Android-специфические вещи?

В настоящее время большинство демонстрационных приложений имеют экранную кнопку возврата назад, чтобы вернуться к предыдущему экрану. Нажатие кнопки psysical всегда, кажется, покидает приложение, и в некоторых ситуациях это приводит к нарушению доступа.

В форме OnKey... события Key параметром является vkHardwareBack на Android. Например:

 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; 

Вот обновленный код для ответа Реми (работает с Сиэтлом):

 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; 

Попробуй это:

 uses FMX.Platform,FMX.VirtualKeyboard,FMX.Helpers.Android; procedure THeaderFooterForm.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 if MessageDlg('Exit Application?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbOK, TMsgDlgBtn.mbCancel], -1) = mrOK then begin // Exit application here... SharedActivity.Finish; end; end; end else // Menu button pressed if Key = sgiUpRightLong then begin showmessage('Menu button pressed'); end; end; 

Извините за мое предыдущее сообщение. Речь шла о прекращении подачи заявки.

Возврат к предыдущему экрану зависит от вашего дизайна приложения.

Если вы использовали TTabControl для отображения страниц, вы можете перейти к предыдущему TTabItem . Если вы использовали TForms для отображения страниц, вы должны использовать процедуру Close() для закрытия текущей формы и возврата к предыдущему экрану.