为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幕布斯6054654 2019-08-31 15:57:47
有没有办法检测用户何时解锁手机?我知道ACTION_SCREEN_ON并且ACTION_SCREEN_OFF,但是当按下电源按钮时屏幕打开/关闭时这些似乎被触发,但实际上当按下菜单按钮时电话解锁时实际上没有...我正在尝试在活动运行时检测解锁/锁定,并且我想在解锁后恢复活动。
查看完整描述

3 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

这是做什么的:


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


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



查看完整回答
反对 回复 2019-08-31
?
噜噜哒

TA贡献1784条经验 获得超7个赞

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


        }

    }

}


查看完整回答
反对 回复 2019-08-31
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

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);


查看完整回答
反对 回复 2019-08-31
  • 3 回答
  • 0 关注
  • 1143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信