[FMX]将 Android 程序切换到后台及从后台切换到前台实现

有时候,我们需要将自己的Android程序切换到后台运行,在必要时,将其切换到前台运行。下面提供了一种实现方式,首先需要引用三个单元:

1

uses Androidapi.JNI.App,Androidapi.JNI.GraphicsContentViewText,Androidapi.Helpers;

将应用程序切换到后台,这里提供了两种方法,一种是将应用切换回桌面来实现,执行后相当于按下 Home 键:

1

2

3

4

5

6

7

8

9

10

procedure SendAppToBack(Sender: TObject);

var

intent:JIntent;

begin

intent:= TJIntent.Create;

intent.setAction(TJIntent.JavaClass.ACTION_MAIN);

intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);

intent.addCategory(TJIntent.JavaClass.CATEGORY_HOME);

SharedActivityContext.startActivity(intent);

end;

另一种办法是调用 JActivityManager.moveTaskToBack 函数,这种相当于按下返回键,但程序没有退出。我们先需要实现一个 ActivityManager 的服务实例,XE7 没有提供默认函数,咱们模仿写一个,这个函数在后面将程序切换到前台时一样需要用到:

1

2

3

4

5

6

7

function SharedActivityManager: JActivityManager;

var

AService: JObject;

begin

AService := SharedActivityContext.getSystemService(TJContext.JavaClass.ACTIVITY_SERVICE);

Result := TJActivityManager.Wrap((AService as ILocalObject).GetObjectID);

end;

现在切换到后台,只需要一句代码:

1

2

3

4

procedure SendAppToBack;

begin

SharedActivityManager.moveTaskToBack(SharedActivity.getTaskId,TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);

end;

反过来,切换到前台也只需要一句代码:

Delphi/Pascal

1

2

3

4

procedure BringAppToFront;

begin

SharedActivityManager.moveTaskToFront(SharedActivity.getTaskId,TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);

end;

使用 moveTaskToBack/moveTaskToFront 需要注意,应用程序需要 reorder tasks 的授权(自己到项目设置里勾选上就OK了)。

原文地址:https://www.cnblogs.com/westsoft/p/8442557.html

时间: 2024-10-22 13:20:01

[FMX]将 Android 程序切换到后台及从后台切换到前台实现的相关文章

如何处理android程序变为后台程序,系统回收资源,再次打开时,程序因为null指针等崩溃

home键等原因,程序会变为后台程序,系统会更具需要,可能回收资源,再打开时候,就会因为资源回收,再调用oncreate,没有Intent参数而导致程序崩溃.   这种情况,我们可以处理的方式有两种,一是用: @Override     protected void onSaveInstanceState(Bundle outState) {      // TODO Auto-generated method stub      super.onSaveInstanceState(outSta

Android: 网络随时需要在3G和Wifi切换,网络程序需要注意

平时,3G和WIFI 都开着的时候,Android默认使用Wifi,但现实环境中不可能到处都有wifi,所以手机会经常自动切换网络. 有的时候,手机一开始使用wifi上网,当进入待机后10-30分钟,会自动从Wifi切换到3G网络. 如果编写网络程序,网络自动切换对程序的影响是非常明显的,IP地址肯定会变化. 感觉Android环境与我们日常用的windows环境还是有很大不同的,写Android程序,明显需要注意的细节有很多. ---------------------------------

Android程序中实现中英文切换

一开始项目没有考虑到英文切换这是一个很不好的开始.等到项目基本完成之后才意识到要中英文都支持. 最好是在项目开始之前规划好UI布局等等,毕竟一个英文单词的占空比汉字要长的很多,最后填英文的话很多时候都要调整UI并且单词要简写,这是很懵逼的一种操作. 没办法,坑还是得填的,今天写一写在Android studio下如何实现一个项目中英文切换. 首先在res路径下新建 New > Android Resource Directory. 弹出对话框选择Local 在右边选择地区,选择语言进行创建,语言

Android 程序员必须知道的 53 个知识点

1. android 单实例运行方法 我们都知道 Android 平台没有任务管理器,而内部 App 维护者一个 Activity history stack 来实现窗口显示和销毁,对于常规从快捷方式运行来看都是 startActivity 可能会使用 FLAG_ACTIVITY_NEW_TASK 标记来打开一个新窗口,比如 Launcher,所以考虑单任务的实现方法比较简单,首先 Android123 纠正下大家一种错误的方法就是直接在androidmanifest.xml 的 applica

处理Android程序运行时的配置变化

本篇文章翻译自Android官方文档Handling Runtime Changes,有翻译错误请留言告知,多谢. Android程序在运行期间设备的配置是可能发生改变的(例如屏幕的方向,键盘可用性,和语言等).当这些配置发生变化时,Android会重启正在运行的Activity(先调用onDestory(),紧接着调用onCreate()).这个设计是为了让你的程序在配置发生变化时,使用不同的资源自动去适配新的配置机器. 正确的处理重启,一件很重要的事就是通过Activity正常的生命周期去恢

android程序---->android五子棋的实现

在慕课网上学习了五子棋的课程,感觉挺不错.然后自己写了个关于五子棋的android程序,从中还是能够学习到很多东西的.现在我们开始今天五子棋程序的编写历程.程序的源码请参见友情链接: 目录导航 一些前期做准备的代码 自定义棋盘的View 保存残局并恢复棋局 判断游戏是否结束的算法 友情链接 好了,我们现在开始一步步的构建出项目来,首先是如下的项目结构图: 运行的效果图: 一些前期做准备的代码 一. 主活动类MainActivity,在菜单中加入了再来一局的功能: public class Mai

Delphi Android程序启动过程

Delphi的Android程序是原生的程序,也就是NativeActivity.那么就需要先看一下NativeActivity的原理, 在AndroidManifest.xml文件里面指定入口activity为nativeactivity,这样应用程序一启动,java虚拟机这边就开一个主线程,主线程创建一个活动,就是nativeactivity,这个nativeactivity在创建的过程中就会去应用程序的.so动态链接库中寻找一个函数: __ANativeActivity_onCreate(

[转]-用Gradle 构建你的android程序

出处:http://www.cnblogs.com/youxilua  前言 android gradle 的插件终于把混淆代码的task集成进去了,加上最近,android studio 用的是gradle 来构建项目, 下定决心把android gralde 构建项目的用户指南全部看完, 让不会用gradle 的人也用gradle构建android项目,让打包(注意,打包和构建是两码事)多版本android不再痛苦.最后,题外话:珍惜生命,远离ant.... Gradle build and

Android程序权限

android.permission.ACCESS_CHECKIN_PROPERTIES 允 许读写访问"properties"表在checkin数据库中,改值可以修改上传( Allows read/write access to the "properties" table in the checkin database, to change values that get uploaded) android.permission.ACCESS_COARSE_LO