搞了两块 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 聊聊, 查看更多联系方式