前言
最近项目需要,在Android上编写的程序,需要实现开机自启动。笔者查询了下资料,基本原理如下:
当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为 android.intent.action.BOOT_COMPLETED。 只要在程序中“捕捉”到这个消息,再启动程序入口之即可。 我们要做的是做好接收这个消息的准备,而实现的手段就是实现一个BroadcastReceiver类
一、确定包名
首先切换到Android的开发套件上,生成AndroidManifest.xml文件,操作步骤如下所示
Qt开发的android程序,默认包名可能是org.qtproject.example,一般会自定义一个包名。
二、创建java文件
根据找到的包名,创建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";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(action_boot)){
Intent StartIntent=new Intent(context,org.qtproject.qt.android.bindings.QtActivity.class); //接收到广播后,跳转到MainActivity
StartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(StartIntent);
}
}
}
说明:
1.java文件中的包名,必需与应用程序中的包名对应
2.Intent()中第二个参数,需要在AndroidManifest.xml文件中查找,必须对应
若是Qt5,可能是org.qtproject.qt5.android.bindings.QtActivity.class
三、修改AndroidManifest.xml文件
1.在application标签内,添加receiver
<receiver android:name=".BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.HOME"/>
</intent-filter>
</receiver>
2.添加启动权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
整个 AndroidManifest.xml文件如下所示
四、运行测试
添加完成后,就可以运行测试了。但记住,需要分配足够的权限,且需要至少运行一次才能生效。
笔者测试使用的源码下载
后记
笔者在多个android设备上测试均正常,但在华为鸿蒙上未成功