Delphi 将Android应用弄到后台

欢迎加入全网最大Delphi 技术交流群 682628230

在使用Delphi 11开发的Android应用中,您可能需要控制应用如何响应硬件返回键(vkHardwareBack)事件。特别是当您的主界面(TMainForm)包含一个视图栈时,处理返回键以避免显示空的主界面或直接退出应用变得尤为重要。

将应用发送到后台的方法

为了实现当视图栈仅剩一个视图时按下返回键将应用发送到后台而非展示空主界面的效果,您可以使用以下方法:

首先,引入必要的单元:

uses
  Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText;

然后,定义一个过程SendAppToBackground来将应用发送到后台:

procedure SendAppToBackground;
var
  LIntent: JIntent;
begin
  LIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_MAIN);
  LIntent.addCategory(TJIntent.JavaClass.CATEGORY_HOME);
  LIntent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
  TAndroidHelper.Context.startActivity(LIntent);
end;

或者,更简单地使用moveTaskToBack方法:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
begin
  if Key = vkHardwareBack then
  begin
    Key := 0; // 取消默认的返回键行为
    if Scenes.Count > 1 then
      Scenes.Pop // 如果视图栈中有多个视图,则弹出顶部视图
    else
      TAndroidHelper.Activity.moveTaskToBack(True); // 否则,将任务发送到后台
  end;
end;

这种方法允许您根据视图栈的状态决定是弹出当前视图还是将整个应用发送到后台。通过这种方式,可以有效避免用户看到空的主界面,并提供更加流畅的用户体验。此外,使用moveTaskToBack比启动一个新的意图回到主屏幕更为直接,因为它不会切换当前的任务至主屏幕,而是简单地将应用最小化。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享