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

在Kotlin中注册Keyguard状态变化回调时,Intent.ACTION_KEYGUARD_LOCKED不存在怎么办?

锁屏/解锁状态监听解决方案

首先明确:Intent.ACTION_KEYGUARD_LOCKED并非Android系统标准常量,监听锁屏与解锁状态需使用以下系统提供的Intent Action:

  • Intent.ACTION_SCREEN_OFF:屏幕熄灭(通常触发锁屏)
  • Intent.ACTION_USER_PRESENT:用户成功解锁屏幕
  • Intent.ACTION_SCREEN_ON:屏幕点亮(可选监听)

优化后的LockStateReceiver(Java)

public class LockStateReceiver extends BroadcastReceiver {

    public static boolean CURRENT_KEYGUARD_STATE = false;

    static {
        Context context = VectorApplication.Companion.getAppContext();
        KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
        CURRENT_KEYGUARD_STATE = keyguardManager.isKeyguardLocked();
    }

    @Override
    public void onReceive(final Context context, final Intent intent) {
        String action = intent.getAction();
        KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
        
        if (Intent.ACTION_SCREEN_OFF.equals(action) || Intent.ACTION_USER_PRESENT.equals(action)) {
            CURRENT_KEYGUARD_STATE = keyguardManager.isKeyguardLocked();
            System.out.println(">>> 锁屏状态变更:" + CURRENT_KEYGUARD_STATE);
        }
    }
}

Kotlin中动态注册接收器的正确写法

val mLockStateReceiver = LockStateReceiver()
val intentFilter = IntentFilter().apply {
    addAction(Intent.ACTION_SCREEN_OFF)
    addAction(Intent.ACTION_USER_PRESENT)
    addAction(Intent.ACTION_SCREEN_ON) // 可选,用于监听屏幕点亮事件
}

// 注册广播(若使用自定义BroadcastManager封装,替换为对应方法即可)
VectorApplication.getAppContext().registerReceiver(
    mLockStateReceiver,
    intentFilter
)

关键注意事项

  • Android 8.0(API 26)及以上版本,静态注册上述广播会失效,必须使用动态注册方式。
  • 需在组件销毁(如Activity的onDestroy、Service的onDestroy)时调用unregisterReceiver(mLockStateReceiver),避免内存泄漏。
  • 依赖KeyguardManager.isKeyguardLocked()获取实时锁屏状态,结合广播事件可保证状态监听的准确性。

内容的提问来源于stack exchange,提问作者Amir reza Riahi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:27:36