有没有办法检测用户何时解锁手机?我知道ACTION_SCREEN_ON
并且ACTION_SCREEN_OFF
,但是当按下电源按钮时屏幕打开/关闭时这些似乎被触发,但实际上当按下菜单按钮时电话解锁时实际上没有...
我正在尝试在活动运行时检测解锁/锁定,并且我想在解锁后恢复活动.
小智 61
这是做什么的:
假设您想要在手机解锁时检测解锁事件并在您的活动中执行某些操作.拥有ACTION_SCREEN_ON,ACTION_SCREEN_OFF和ACTION_USER_PRESENT的广播接收器.
触发ACTION_SCREEN_ON时将调用onResume活动.创建一个处理程序并等待ACTION_USER_PRESENT.触发后,实施您想要的活动.
感谢CommonsWare的答案:Android - 设备解锁后会发生什么?
小智 23
经过一段时间的分散后,我发现最好的方法是在"android.intent.action.USER_PRESENT"动作上注册BroadcastReceiver.
"广播操作:设备唤醒后用户在场时发送(例如当键盘消失时)."
为了区分用户在未锁定到实际解锁时打开屏幕的情况,请使用KeyguardManager检查安全设置.
代码示例:
将此添加到您的活动中:
registerReceiver(new PhoneUnlockedReceiver(), new IntentFilter("android.intent.action.USER_PRESENT"));
Run Code Online (Sandbox Code Playgroud)
然后使用这个类:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
通过此语句注册接收者
receiver = new PhoneUnlockedReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_USER_PRESENT);
filter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(receiver, filter);
Run Code Online (Sandbox Code Playgroud)
没有测试,但尝试以下操作:
ACTION_SCREEN_ON
。第一步需要过滤掉常规的 HOME 键按下操作。
归档时间: |
|
查看次数: |
55389 次 |
最近记录: |