Android 工控屏中 App 的自启动实现

更新日期: 2025-03-27 阅读次数: 141 字数: 428 分类: Android

搞了两块 Android 工控屏,需要系统重启后,能自动开启自己开发的这个蓝牙控制 App。找了半天没有找到系统设置,在哪里能指定某个 App 开机自启动。

找了技术支持,大体意思是,这款主板是比较复杂一点,其他款的主板是可以的,这款主板只能在APP里面去设置自启动。然后留下一句话:

把开机包名赋值给这个persist.spirit.bootapp属性就可以了,你试一下

我 X,丈二和尚摸不着头脑,这个回复也太抽象了。于是我 google 了一下,完全没有匹配的关键词。让 AI 写,也完全不行。

在 StackOverflow 上找到了解决方案:

AndroidManifest.xml

    <!-- 添加开机广播权限 -->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.ACTION_MANAGE_OVERLAY_PERMISSION" />

   </application>
        <!-- 声明广播接收器 -->
        <receiver
            android:name=".BootReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
    </application>

BootReceiver

在 MainActivity.kt 的平级目录新建一个 BootReceiver.kt 文件:

package com.sunzhongwei.app

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Log

class BootReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
            // 创建启动主 Activity 的 Intent
            val mainIntent = Intent(context, MainActivity::class.java)
            mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            // 启动主 Activity
            context.startActivity(mainIntent)
            Log.d("BootReceiver", "App started on boot completed")
        }
    }
}

MainActivity.kt

OnCreate 函数的最后,加上

        // 请求悬浮窗权限
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && !Settings.canDrawOverlays(this)) {
            val intent = Intent(
                Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                Uri.parse("package:$packageName")
            )
            startActivityForResult(intent, 232)
        }

由于系统是 Android 11 的系统,所以是没问题的。

运行结果

运行之后,会申请悬浮在其他app之上的权限,不了解为啥会需要这个权限。

不过,重启 Android 系统之后,确实能自动启动这个 App 了。

但是,还有个奇葩的 bug,其中一个屏幕在启动 app 后,会直接黑屏,需要点一下切换app 按钮,才能显示正常。。。又不支持数据线联机调试。。。明天试试 wifi 调试吧,这种山寨屏幕真得浪费生命。

参考

https://stackoverflow.com/questions/72972225/android-app-to-start-automatically-on-boot-up

微信关注我哦 👍

大象工具微信公众号

我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式