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

如何在解锁屏幕时自动启动APP?使用ACTION_USER_PRESENT无效求助

问题排查与解决

1. 类名拼写错误

你的广播接收器类名是ScreenReciver(注意拼写为Reciver),但在manifest.xml里注册的是.ScreenReceiver(正确拼写应为Receiver),两者名称不匹配,导致系统无法找到对应的接收器,这是核心问题之一。请统一类名与注册名称:要么把类名改成ScreenReceiver,要么把manifest中的注册名调整为.ScreenReciver。

2. Android 8.0+静态广播限制

从Android 8.0(API level 26)开始,系统限制静态注册的广播接收器接收隐式广播,ACTION_USER_PRESENT属于被限制的广播类型,静态注册无法触发。解决方案是动态注册广播接收器:

在MainActivity(或其他已启动的Activity)中添加以下代码:

private ScreenReceiver screenReceiver;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    screenReceiver = new ScreenReceiver();
    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_USER_PRESENT);
    filter.addAction(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_BOOT_COMPLETED);
    registerReceiver(screenReceiver, filter);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    // 取消注册避免内存泄漏
    unregisterReceiver(screenReceiver);
}

同时可移除manifest.xml中对应广播的静态注册(若保留BOOT_COMPLETED需添加权限,见下一点)。

3. 权限缺失

如果需要接收ACTION_BOOT_COMPLETED广播,必须在manifest.xml中声明权限:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

4. 锁屏状态启动Activity的Flag补充

解锁屏幕时启动Activity,建议补充Flag确保正常显示:

Intent launchIntent = new Intent(context, MainActivity.class);
launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
// 适配Android 10+锁屏启动
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    launchIntent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
}
// 允许锁屏时显示Activity
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
    launchIntent.addFlags(Intent.FLAG_SHOW_WHEN_LOCKED);
} else {
    launchIntent.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}
context.startActivity(launchIntent);

Android 10+使用FLAG_SHOW_WHEN_LOCKED时,需在manifest.xml的对应Activity中添加:

<activity android:name=".MainActivity"
    android:showOnLockScreen="true">

5. 测试注意事项

  • 动态注册的广播接收器仅在App处于运行状态时生效,若App被杀死则接收器失效,如需后台持续监听需配合前台服务。
  • 测试ACTION_USER_PRESENT时,需确保设备是从锁屏状态解锁(而非仅唤醒屏幕)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:42:48