【发布时间】:2015-12-10 19:45:47
【问题描述】:
是否有可能在 Delphi 10 Seattle 中创建一个 android 应用程序(带有后台服务),它会在启动 android 设备后自动启动?
我找到了一个解决方案(Auto start Delphi XE5 Android App after boot),但它是针对Delphi XE5版本的,没有自动启动后台服务的选项。
你们中有人尝试过解决这个问题吗?如果是,请与我们分享您的解决方案?
更新:
我不知道怎么了。
将广播接收器添加到使用中
-
注册广播接收器
procedure TForm1.CreateBroadcastReceiver; begin if not Assigned(BroadcastReceiver) then begin BroadcastReceiver:= TCSBroadcastReceiver.Create(nil); BroadcastReceiver.OnReceive:= BroadcastReceiverOnReceive; BroadcastReceiver.RegisterReceive; BroadcastReceiver.Add('android.intent.action.BOOT_COMPLETED'); end; end; -
设置 BroadcastReceiver OnReceive
procedure TForm1.BroadcastReceiverOnReceive(csContext: JContext; csIntent: JIntent); var Inx: JIntent; begin if JStringToString(csIntent.getAction).Contains('android.intent.action.BOOT_COMPLETED') then begin Inx := TJIntent.Create; Inx.setClassName(csContext, StringToJString('com.embarcadero.firemonkey.FMXNativeActivity')); Inx.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); TAndroidHelper.Context.startActivity(Inx); end; end; 更新
AndroidManifest.xml
<receiver android:name="com.embarcadero.rtl.notifications.NotificationAlarm" />
<receiver android:name="com.embarcadero.ProjectBCTA"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
启用
RECEIVE_BOOT_COMPLETED权限启动了应用程序。
已停止应用程序。
重新启动机器。
重新启动系统后显示错误消息应用程序已停止。
我做错了什么。什么是错误?
【问题讨论】:
-
得知这个Broadcast Receiver不能用,因为它不是服务,只是动态的。
-
你应该尝试创建自己的jar文件,然后合并到项目中的其他jar文件到Libraries中?见docwiki.embarcadero.com/RADStudio/Seattle/en/…
-
嗨,KJAN。您是否曾经仅使用 Delphi 代码成功地为
BOOT_COMPLETED编写了 BroadcastReceiver?我也卡在这里了。您的方法可能会失败,因为需要 BroadcastReceiver 来启动应用程序并创建主表单,但在您的代码中,表单会创建 BroadcastReceiver。
标签: android delphi service autorun delphi-10-seattle