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

Android如何通过代码从后台唤醒自有App?适配10及以上系统版本

Android 10及以上版本后台唤醒App失效解决方案

Android 10(API 级别 29)开始,系统新增了后台应用启动Activity的限制规则,只有满足权限要求或豁免场景的应用才能从后台唤起页面,这是你现有代码在高版本系统失效的核心原因。

你可以按照以下步骤修复问题:

  • 第一步:申请悬浮窗权限作为通用豁免条件
    该权限是Android官方指定的后台启动Activity豁免权限之一,首先在AndroidManifest.xml中添加权限声明:
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    
    该权限需要引导用户手动开启,你可以在App首次启动时引导用户跳转至设置页授权:
    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()));
        startActivity(intent);
    }
    
  • 第二步:调整启动Activity的代码逻辑
    从服务上下文启动Activity必须添加FLAG_ACTIVITY_NEW_TASK标识,同时增加版本适配判断,修改后的代码如下:
    protected Emitter.Listener onNewEmit = new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            Intent intent = getIntent();
            intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                // 高版本先校验悬浮窗权限再启动
                if (Settings.canDrawOverlays(YourService.this)) {
                    startActivity(intent);
                }
            } else {
                startActivity(intent);
            }
        }
    };
    
  • 可选适配方案:如果你不方便引导用户开启悬浮窗权限,可以将现有后台服务调整为前台服务,启动服务后5秒内调用startForeground展示常驻通知,该场景也属于系统豁免后台启动Activity的范围,不需要额外申请悬浮窗权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:54:04