RAD STUDIO DELPHI创建安卓服务CREATING ANDROID SERVICES


本文整理自网络,侵删。

 
创建Android服务
Android服务是一个没有用户界面的应用程序,它执行后台任务。基本上有两种服务类型:

开启服务:此服务由Android应用程序启动。即使应用程序关闭,服务也可以无限期地在后台运行。这种类型的服务通常执行单个任务,完成后自动停止。
绑定服务:此服务仅在绑定到Android应用程序时才运行。应用与服务之间有相互作用,它保持活跃直到应用释放。多个应用程序可以绑定到同一个服务。
创建Android服务项目:
1、使用New Android Service wizard创建Android服务。请参阅创建Android服务。
2、使用Add New Android Service wizard将Android服务添加到Multi-Device Application。请参阅将Android服务添加到应用程序。
独立应用程序和Android服务项目应用程序之间存在一些差异

Target Platform (Android)没有以下结点:Target, Configuration and Libraries.
只有Android才可以作为目标平台(target platform)。
Deployment Manager已禁用
Run and Run Without Debugging选项被禁用
创建一个安卓服务
RAD Studio提供了一个向导来创建Android服务项目。
要创建一个新的Android服务项目,选择File > New > Other然后导航到:

Delphi Projects > Android Service
使用此向导指定服务类型,本地或远程(local or remote)。
本地服务(local service)对应用程序是私有的。添加一行代码Android Manifest文件中,其他应用程序的访问被阻止:
"/>
远程服务(remote service)是公共的,其他应用程序可以访问它。添加一行代码到Android Manifest文件,访问服务被准许。
"/>
有关不同选项的更多信息,请参见Android服务。
有关 Android Manifest属性的更多信息,请参见Exported Provider Element。

向应用程序添加安卓服务
Android服务不是独立的应用程序,它们与Multi-Device applications一起工作。
服务一旦被创建,它作为库出现在Project Manager.so。
将Android服务项目添加到多设备应用程序 Multi-Device application:

1、将所有可视化组件、functions和procedures代码添加到data module。
2、保存Android服务项目。
注1:在一个专门的文件夹中保存每个Android服务项目。
注2:不要将Android服务项目命名为Service。
3、在将其添加到应用程序以生成二进制文件之前构建Android服务项目。
4、将要添加服务的应用程序添加到Project Manager:
1.对于已存在的应用程序,在project group中,右键单击并选择Add Existing Project。
2.对于一个新的多设备应用 Multi-Device Application,在project group中,右键单击并选择Add New Project,然后导航到:
Delphi Projects > Multi-Device Application.
5、在多设备应用Multi-Device Application上,选择Android目标平台(Android target platform)。
1.在Android目标平台上,右键单击并选择Add Android Service。
2.添加新的安卓服务向导(Add New Android Service wizard)出现。您有两个选项可以添加一个新的安卓服务。选择下列之一:
1.从项目基路径自动搜索文件。(Search files automatically from project base path.)
选择此选项可选择保存您的Android服务项目的文件夹。向导将自动搜索所需的文件。
警告:如果你在给定的文件夹不止一个安卓服务,向导将随机选择其中一个。如果要添加特定的Android服务,请使用第二个选项。
点击Next.
点击...选择已保存Android服务项目的文件夹。
2.我想手动选择所有想要的文件。(I will select all required files manually.)
选择此选项以手动选择所需的所有文件。
警告:请确保步骤3已完成。否则,您将没有可用的二进制文件。
点击Next.
单击…选择每个所需要的文件。
3.点击Next.
1.如果所有操作都是正确的,那么将要添加到多设备应用程序的文件就会出现在列表中。
2.如果出现一个额外的窗口请求有关Android服务路径的信息,请保存并构建Android服务,然后再试一次。
单击“Finish”将文件添加到应用程序中:
主要的二进制文件, lib.so二进制文件被添加到部署管理器Deployment Manage中r
libProxyAndroidService.so文件。这个库被添加到Deployment Manager中.
注意:此文件由添加到应用程序的所有服务共享。
Java 归档文件(Java archive)<项目名>.jar。jar文件被添加到Android target platform的Project Manager的Libraries结点下。
数据模块文件,<项目名>.pas文件被添加到Project Manager.
7、编译Multi-Device Application以生成Android Manifest文件。与先前选择的服务类型(本地或远程local or remote)相对应的行将自动添加。请参阅创建Android服务。
注:每个服务需要在AndroidManifest.xml相应的声明。这是由IDE自动添加的。
向应用程序添加几个Android服务
您可以向Android应用程序添加任意数量的服务。
按照添加一个Android服务到应用的步骤为每个服务添加。
考虑到的重要事情:

如果在同一个文件夹中有几个Android服务项目,并且希望包含一个特定的项目,请在步骤5.2中选择第二个选项。否则,向导可能会添加不需要的Android服务。
在添加服务到主应用前,为每个项目命名不同的名称:
安卓服务项目, lib<服务名>.so.
注:不要将Android服务项目命名为Service。
单元文件。
数据模块,通过更改对象检查器(Object Inspector)上的name属性。
项目依赖项Project Dependencies
安卓服务项目添加到多设备应用出现在Project Dependencies
Android服务项目接种到宿主应用程序自动启用的Project Dependencies总是在宿主应用前建立。

从应用程序中删除Android服务
在多设备应用程序上,选择Android目标平台。
1、在Android目标平台上,右键单击并Remove Android Service。
2、出现Remove Android Services wizard向导
3、选择要从列表中删除的服务。
4、点击Next
5、向导显示要执行的操作列表,例如删除数据模块,.so扩展文件和.JAR扩展文件。
6、点击Finish
启动服务
使用ALocalServiceConnection.StartService('<服务名>') and ALocalServiceConnection.BindService('<服务名>'), or ARemoteServiceConnection.StartService('<服务名>') and ARemoteServiceConnection.BindService('<服务名>'),服务开始启动。
当启动或绑定时,初始化TLocalServiceConnection变量到一个特定服务,之后你不需要参考服务名称的其他方法。
一旦将Android服务添加到多设备应用程序:

在interface接口部分Uses包括下面的单元:


Uses
System.Android.Service; // 包含与服务一起工作的方法单元。
Uses包含 <服务名.pas>单元在implementation。这允许你使用所有的方法定义在数据服务模块。


implementationuses
MyLocalService; //Key sensitive
{$R *.fmx}
Construct a TLocalServiceConnetion variable for a local service, or a TRemoteServiceConnection variable for a remote service.
构建一个TLocalServiceConnetion变量为本地服务(local service),或一个TRemoteServiceConnection变量为远程服务(remote service)。
1、声明TLocalServiceConnection/TRemoteServiceConnection变量。

type
  TForm1 = class(TForm)
    ...
  private
    { Private declarations }
    FServiceConnection1: TLocalServiceConnection; // For a local service.
    FServiceConnection2: TRemoteServiceConnection; // For a remote service.
  public
    { Public declarations }
  end;
2、创建TLocalServiceConnection/TRemoteServiceConnection变量:


FServiceConnection1 := TLocalServiceConnection.Create; // For a local service.
FServiceConnection2 := TRemoteServiceConnection.Create; // For a remote service.
启动服务
要启动服务,调用StartService('<服务名>') 开启服务
在启动服务后,你需要用JavaService.stopSelf管理服务进程停止服务;

粘性启动(Sticky Start)
在服务的OnStartCommand事件被默认限定为START_NOT_STICKY.

START_STICKY用于明确启动和停止需要的服务。系统试图在杀死时重新创建服务。
START_NOT_STICKY用于当处理任何命令发送给他们仅保留运行的服务。如果进程被杀死,则服务不会自动重启。
如果你想在onStartCommand事件中使用START_STICKY,你需要在服务中说明:



function TService1DM.AndroidServiceStartCommand(const Sender: TObject;
  const Intent: JIntent; Flags, StartId: Integer): Integer;
begin
  Result := TJService.JavaClass.START_STICKY;
end;
更多信息, 参阅Service Lifecycle.

绑定服务(Bound Service)
对于 Bound Service ,调用 BindService('<服务名>')绑定到服务,使用UnBindService来断开服务

更多信息, 参阅 Bound Services.

BindService / UnBindService方法
当主程序调用BindService('<服务名>'),连接变量得到正在运行服务的内存地址指针
在建立一个特定服务连接后,当调用UnBindService并且这个应用是唯一一个绑定到服务的应用时,这个服务自己释放。考虑到主应用程序的连接变量仍然指向同一个内存地址。再次绑定到同一个服务可能会导致主应用程序崩溃,因为服务的内存地址可能无效。
处理这种情况有两种方法:

避免ARC(Automatic Reference Counting)使用[UnSafe]属性
在从服务解绑前指定Nil到变量
Using the [Unsafe] Attribute



private
    { Private declarations }
    [Unsafe] Service1: TAndroidService1DM;
更多信息,参阅The Unsafe Attribute.

OnBind事件
当你在应用中调用BindService('<服务名>'),在Android服务中触发触发onBind事件。onBind方法返回一个IBinder对象,负责实际管理与服务的连接。

使用onBind方法:

在onBind方法返回IBinder对象:
Delphi/Pascal


function TAndroidServiceDM.AndroidServiceBind(const Sender: TObject;
  const AnIntent: JIntent): JIBinder;
begin
  // .... 你的代码
  Result := GetBinder(Self);
end;

相关阅读 >>

Delphi 实现 托动pagecontrol上的标签页

Delphi文本转换图片

Delphi 检测鼠标键盘多久没有活动

Delphi webbrowser通过遍历id查找元素是否存在

Delphi中调用http xml

Delphi xe7 新的并行库 system.threading

Delphi xe中将正则表达式tregex的使用

Delphi 从网页里下载图片的程序

Delphi 从摄像头获取照片并转换为特定的格式

Delphi 2009 之 tbuttonededit

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...