Android - 检测手机解锁事件,而不是屏幕

时间:2010-08-10 05:09:00

标签: android

有没有办法检测用户何时解锁手机?我知道ACTION_SCREEN_ONACTION_SCREEN_OFF,但是当按下电源按钮时屏幕打开/关闭时似乎会触发这些,但实际上当按下菜单按钮时电话解锁时却没有...

我正在尝试在活动运行时检测解锁/锁定,并且我想在解锁后恢复活动。

4 个答案:

答案 0 :(得分:61)

以下是该做什么:

假设您要检测解锁事件,并在手机解锁时在您的活动中执行某些操作。拥有ACTION_SCREEN_ON,ACTION_SCREEN_OFF和ACTION_USER_PRESENT的广播接收器。

触发ACTION_SCREEN_ON时,将调用

onResume活动。创建一个处理程序并等待ACTION_USER_PRESENT。触发后,实施您想要的活动。

在此处获得CommonsWare的答案:Android -- What happens when device is unlocked?

答案 1 :(得分:21)

经过一段时间的分散后,我发现最好的方法是在" android.intent.action.USER_PRESENT"上注册一个BroadcastReceiver。动作。

"广播操作:设备唤醒后用户在场时发送(例如,当键盘锁定消失时)。"

要区分用户在未实际解锁时锁定屏幕的情况,请使用KeyguardManager检查安全设置。

代码示例:

将此添加到您的活动中:

registerReceiver(new PhoneUnlockedReceiver(), new IntentFilter("android.intent.action.USER_PRESENT"));

然后使用此课程:

public class PhoneUnlockedReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        KeyguardManager keyguardManager = (KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE);
        if (keyguardManager.isKeyguardSecure()) {

            //phone was unlocked, do stuff here            

        }
    }
}

答案 2 :(得分:4)

public class PhoneUnlockedReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)){
            Log.d(TAG, "Phone unlocked");
        }else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){
            Log.d(TAG, "Phone locked");
        }
    }
}

通过此声明注册接收者

receiver = new PhoneUnlockedReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_USER_PRESENT);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        registerReceiver(receiver, filter);

答案 3 :(得分:1)

没有测试它,但尝试以下方法:

  • 等待ACTION_SCREEN_ON
  • (屏幕打开后,等待ACTION_MAIN与CATEGORY_HOME类别(启动主屏幕) - 这可能是手机解锁后发送的内容。

需要第一步来过滤常规的HOME键按下。