Qt for Android(五) —— APP 如何开机自启动

1,405 阅读2分钟

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

这篇文章要基于前面的基础,我们才能继续下面的内容,建议阅读。

Qt for Android(一) —— QT 中如何调用android方法

Qt for Android(二) —— QT 中调用自定义Android方法详细教程(获取Android设备的SN号)

Qt for Android(三) —— QT 中获取 Android 的Services,并调用需要Context参数的 c方法(设置音量、亮度等)

背景

在前面我们讲了一些基础操作,包括怎么在 qt 添加 java代码,如何去调用这些代码等。但是要做到开机自启动,是需要新增 java 代码的,单纯的在 C++ 层是做不到的。

分析

首先要知道当Android系统启动时,会发出一个系统广播 ACTION_BOOT_COMPLETED,它的字 符串常量表示为 android.intent.action.BOOT_COMPLETED,代表了系统开机完成。 我们只要在程序中监听到这个广播,再跳转到主Activity 并启动自身Activity即可。 因此我们要注册一个BroadcastReceiver类。

案例

1、基于文章二,在相同的目录下新增java文件BootBroadcastReceiver.java,当然名字可以自定义。

2、在类中添加代码:

package com.qht.test;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class BootBroadcastReceiver extends BroadcastReceiver {
    static final String action_boot="android.intent.action.BOOT_COMPLETED";
    final String CLASS_NAME = "BootBroadcastReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
            Log.i(CLASS_NAME, "recv broacast, action = "+intent.getAction());
            if (intent.getAction().equals(action_boot)){
                    try {
                       Log.i(CLASS_NAME, "recv broacast, ready sleep");
                       Thread.sleep(2000);
                       Log.i(CLASS_NAME, "recv broacast, after sleep ");
                    } catch (InterruptedException e) {
                       e.printStackTrace();
                    }
                    Intent StartIntent=new Intent(context, org.qtproject.qt5.android.bindings.QtActivity.class); //接收到广播后,跳转到主Activity
                    StartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                    Log.i(CLASS_NAME, "startActivity");
                    context.startActivity(StartIntent);
            }
    }
}

上面代码中的org.qtproject.qt5.android.bindings.QtActivity即为QT程序在android下运行的默认主Activity,当然这个 Activity是可以自定义,后面的文章我们再讲这块。

3、打开 android 目录下的 AndroidManifest.xml 文件,在 application 节点下注册一个receiver:

在这里插入图片描述

然后我们给加上开机自启动的权限:

   <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
至此,QT for Android的开机自启动功能就完成了,我们可以用一个简单的APK测试一下。

注意:这种方式需要启动一次程序,完成广播的注册。等下次手机开机时,软件即会自动启动。