从delphi 开始支持安卓的开发开始, 安卓service 开发一直都是delphier 绕不过去的坎,
以前也有开发service 的方法,但是都是手工处理启动文件,而且要修改很多东西,基本上成功
的概率很低。
delphi 10 seattle(这个名字很特殊,与win10 一样,直接跳过了9) 终于官方支持安卓service 开发了,
不知道现在现在开发安卓service 是不是很简单?那么就让我们一探究竟。
首先,我们开启已经扁平的不能再扁平delphi 10, 选择建立一个其他项目。出现下图:
选择第一个绿色机器人(不用想,都是android 的东西),点确认。进入下一图:
选择服务类型,不同的类型功能不太一样,我在以后再介绍,今天先选第一个,从最简单的开始。
点OK 后就生成一个工程。
我们把工程名改成我们喜欢的名字,然后单独保存到一个目录(记住,是单独保存到一个目录,主要的话要说几遍来着?)。
注意名字。
然后放置一个控件
uses Androidapi.JNI.App; function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin LThread := TThread.CreateAnonymousThread(procedure begin while true do begin sleep(10000); DoNotification; end; end); LThread.FreeOnTerminate := False; LThread.Start; Result := TJService.JavaClass.START_STICKY; // 保持服务运行 end; procedure TAndroidServiceDM.DoNotification; var MyNotification: TNotification; begin MyNotification := NotificationCenter1.CreateNotification; try MyNotification.Name := 'xalion'; MyNotification.Title := '时间到了'+formatdatetime('yyyy-mm-dd hh:nn:sss',now); MyNotification.AlertBody := '懒人都要起床了'; MyNotification.FireDate:=now; NotificationCenter1.PresentNotification(MyNotification); finally MyNotification.Free; end;
OK, 点buider 工程,肯定不是 运行了。因为他是一个so, 肯定跑不起。
现在我们建立一个标准的主程序, 当然是FMX 得了,如果你要建立VCL 的应用的话,那我建议你去看一下精神病科医生。
前面说了,一定要保存到另外一个目录。
窗口如下
并输入以下代码
type Tmainf = class(TForm) Label1: TLabel; Button1: TButton; NotificationCenter1: TNotificationCenter; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure NotificationCenter1ReceiveLocalNotification(Sender: TObject; ANotification: TNotification); private { Private declarations } FService: TLocalServiceConnection; public { Public declarations } end; var mainf: Tmainf; implementation {$R *.fmx} procedure Tmainf.Button1Click(Sender: TObject); begin Fservice:= TLocalServiceConnection.Create; FService.StartService('xalionservice'); end; procedure Tmainf.NotificationCenter1ReceiveLocalNotification(Sender: TObject; ANotification: TNotification); begin TThread.Queue(nil, procedure begin memo1.Lines.Add( ANotification.AlertBody); end); end;
工程如下
在 黑体的上面鼠标右键,然后选add android service.
出现下一个窗口
选择刚才的服务应用的目录。
继续下去就可以了
完了以后,看看工程文件
再看看发布页面
确保这两个文件正确存在。
剩下还要干什么?
当然是编译运行了呀。
点运行服务。
退出程序
等十秒钟
"咚""咚""叮"
手机响起来了
左上角出来了一个火苗图标。
让我们看看是什么?
懒人都起床了
再点一下,就回到了我们的主程序
第一个服务就这样了。不知道算不算简单?
反正是基本上折腾了一天。
什么手机还在每隔10秒叫一次,当然了。为什么,有代码有真相,自己看吧。
一直停不下来,怎么办,很简单呀,把这个应用删掉,就不叫了:)
今天牺牲了一天吹牛的时间,终于把这个搞完了。
后面有空再写别的吧。