最近项目需要,在Android上编写的程序,需要实现开机自启动。笔者查询了下资料,基本原理如下:
当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为 android.intent.action.BOOT_COMPLETED。 只要在程序中“捕捉”到这个消息,再启动程序入口之即可。 我们要做的是做好接收这个消息的准备,而实现的手段就是实现一个BroadcastReceiver类
首先切换到Android的开发套件上,生成AndroidManifest.xml文件,操作步骤如下所示



Qt开发的android程序,默认包名可能是org.qtproject.example,一般会自定义一个包名。
根据找到的包名,创建java文件。以org.qtproject.example为例,需要在android目录下创建src/org/qtproject/example目录。新建java文件BootBroadcastReceiver.java,并放入指定的目录中。
java文件内容如下
package org.qtproject.example;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;public class BootBroadcastReceiver extends BroadcastReceiver {static final String action_boot="android.intent.action.BOOT_COMPLETED";@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(action_boot)){Intent StartIntent=new Intent(context,org.qtproject.qt.android.bindings.QtActivity.class); //接收到广播后,跳转到MainActivityStartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(StartIntent);}}
}
说明:
1.java文件中的包名,必需与应用程序中的包名对应
2.Intent()中第二个参数,需要在AndroidManifest.xml文件中查找,必须对应

若是Qt5,可能是org.qtproject.qt5.android.bindings.QtActivity.class
1.在application标签内,添加receiver
2.添加启动权限
整个 AndroidManifest.xml文件如下所示

添加完成后,就可以运行测试了。但记住,需要分配足够的权限,且需要至少运行一次才能生效。
笔者测试使用的源码下载
笔者在多个android设备上测试均正常,但在华为鸿蒙上未成功