本文整理自网络,侵删。
在某些时候,我们会希望安卓下运行的程序不退出运行,当按下返回键后,程序退出前台但仍在后台运行,这里给出两个方法:
moveTaskToBack方法
使用方式:
procedure TfMain.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;Shift: TShiftState);begin{$IFDEF ANDROID} if Key = vkHardwareBack then begin Key := 0; TAndroidHelper.Activity.moveTaskToBack(False); end;{$ENDIF}end;
首先通过 Key = vkHardwareBack判断是否按下的是返回键,如果是,则先把键值设置为0。其次使用moveTaskToBack(False)让程序退出前台显示,到后台继续运行。函数:function moveTaskToBack(nonRoot: Boolean): Boolean; cdecl;其中参数nonRoot表示:false――只有当前activity是task根,也就是应用启动的第一个activity时,才有效;true――则忽略这个限制,任何activity都可以有效。在Delphi里可以忽略这个参数的意义,直接使用False就行了。
模拟Home按键法
使用方式:
procedure TfMain.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;Shift: TShiftState);{$IFDEF ANDROID}var intent: JIntent;{$ENDIF}begin{$IFDEF ANDROID} if Key = vkHardwareBack then begin Key := 0; intent := TJIntent.Create; intent.setAction(TJIntent.JavaClass.ACTION_MAIN); intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); intent.addCategory(TJIntent.JavaClass.CATEGORY_HOME); TAndroidHelper.Context.startActivity(intent); end;{$ENDIF}end;
这种方式需要使用到意图,同样先检测是否按下了返回键,设置按健值为0.然后使用意图模拟发送Home,让程序退出前台运行。
需要说明的
这两种方式都可以让程序不关闭的情况下退出前台到后台运行,但并不是说APP应用在后台就可以长时间运行。退到后台后,android系统不会马上关闭这些后台的App应用,而是在系统认为合适的时候,才会去关闭它,比如系统发现手机内存不够了,或是符合手机省电模式规则需要关闭时。
――――――――――――――――
原文链接:https://blog.csdn.net/tanqth/article/details/104672281
相关阅读 >>
Delphi的idhttp报508 loop detected错误的原因
Delphi 消息实现窗口最小化,最大化,关闭(Delphi)
更多相关阅读请进入《Delphi》频道 >>