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

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


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



幕布斯6054654
浏览 1145回答 3
3回答

小唯快跑啊

这是做什么的:假设您想要在手机解锁时检测解锁事件并在您的活动中执行某些操作。拥有ACTION_SCREEN_ON,ACTION_SCREEN_OFF和ACTION_USER_PRESENT的广播接收器。触发ACTION_SCREEN_ON时将调用onResume活动。创建一个处理程序并等待ACTION_USER_PRESENT。触发后,实施您想要的活动。

噜噜哒

经过一段时间的分散后,我发现最好的方法是在“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                    }    }}

慕尼黑的夜晚无繁华

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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android