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

如何使用Android Work Manager监听屏幕解锁事件(android.intent.action.USER_PRESENT)

使用Work Manager监听屏幕解锁事件(Android 8+)

Work Manager本身没有内置触发器直接监听android.intent.action.USER_PRESENT这类系统广播,需结合动态注册的BroadcastReceiver触发Work Request,具体实现步骤如下:

1. 创建Worker类

定义继承自Worker的类,处理解锁后的任务逻辑:

public class UnlockScreenWorker extends Worker {
    public UnlockScreenWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
    }

    @NonNull
    @Override
    public Result doWork() {
        // 此处编写屏幕解锁后需执行的任务
        Log.d("UnlockWorker", "屏幕解锁,执行任务");
        return Result.success();
    }
}

2. 实现动态注册的BroadcastReceiver

创建BroadcastReceiver,收到USER_PRESENT广播时提交Work Request到Work Manager:

public class UnlockScreenReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())) {
            // 构建单次执行的Work Request
            OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(UnlockScreenWorker.class)
                    .build();
            
            // 提交任务至Work Manager
            WorkManager.getInstance(context).enqueue(workRequest);
        }
    }
}

3. 在组件中注册/注销Receiver

因Android 8.0+禁止静态注册USER_PRESENT这类隐式广播,需在Activity或前台服务中动态注册,示例以主Activity为例:

public class MainActivity extends AppCompatActivity {
    private UnlockScreenReceiver unlockReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 初始化并注册Receiver
        unlockReceiver = new UnlockScreenReceiver();
        IntentFilter filter = new IntentFilter(Intent.ACTION_USER_PRESENT);
        registerReceiver(unlockReceiver, filter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 注销Receiver,避免内存泄漏
        unregisterReceiver(unlockReceiver);
    }
}

关键注意事项

  • Android 8.0+仅支持动态注册USER_PRESENT广播,静态注册无效。
  • 若需应用后台仍能监听解锁事件,需将Receiver注册在前台服务中,否则应用后台被系统回收后Receiver会失效。
  • 使用OneTimeWorkRequest可确保任务在应用重启后未完成的情况下仍能可靠执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:51:22