You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android如何实现开机完成后自动启动APP?代码问题排查求助

问题排查

  • 核心限制来自Android 10(API级别29)开始引入的后台Activity启动限制:系统禁止应用在后台未获得特殊权限的情况下直接启动Activity,你的广播接收器属于后台触发场景,原有直接调用startActivity的逻辑在高版本系统上无法生效
  • 次要问题:Android 3.1及以上系统默认阻止未被用户手动启动过的应用接收系统广播,若你的应用安装后从未被打开过,也会收不到开机完成广播
  • 附加问题:你申请的相机、录音、存储权限都属于运行时危险权限,若未提前获得用户授权,即便Activity能成功启动也会触发权限异常崩溃

修复方案

方案1:申请悬浮窗权限绕过后台启动限制

  1. 在清单文件中新增权限声明:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
  1. 应用首次启动时引导用户跳转至权限设置页开启悬浮窗权限:
// 检查权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(context)) {
    Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + context.getPackageName()));
    startActivityForResult(intent, 1001);
}

授予权限后原有广播中启动Activity的逻辑即可正常运行。

方案2:使用通知跳转替代直接启动Activity(更合规,无需特殊权限)

修改广播接收器的onReceive逻辑,收到广播后先弹出通知,用户点击通知后再跳转Activity:

@Override
public void onReceive(final Context context, Intent intent) {
    Toast.makeText(context, "Home Task 3 Version ", Toast.LENGTH_LONG).show();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        // 高版本系统走通知跳转逻辑
        Intent activityIntent = new Intent(context, CameraRecorderActivity.class);
        activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
        // 创建通知渠道(Android 8.0及以上需要)
        String channelId = "boot_start_channel";
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(channelId, "开机启动提醒", NotificationManager.IMPORTANCE_HIGH);
            NotificationManager manager = context.getSystemService(NotificationManager.class);
            manager.createNotificationChannel(channel);
        }
        // 构建通知
        Notification notification = new NotificationCompat.Builder(context, channelId)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("点击启动录屏应用")
                .setContentText("设备开机完成,点击即可打开录屏功能")
                .setContentIntent(pendingIntent)
                .setAutoCancel(true)
                .build();
        // 发送通知
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
            notificationManager.notify(1002, notification);
        }
    } else {
        // 低版本系统直接启动
        Intent myIntent = new Intent(context, CameraRecorderActivity.class);
        myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(myIntent);
    }
}

使用该方案需要注意Android 13及以上系统需要提前申请POST_NOTIFICATIONS通知权限。

额外注意项

  • 应用安装后必须手动启动一次,否则无法接收开机广播
  • 首次打开应用时必须引导用户授予相机、录音、存储等必要权限,避免后续启动Activity时崩溃

内容的提问来源于stack exchange,提问作者Bekzhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:27:03