当我的手机屏幕在Android中关闭时无法检测到震动事件

时间:2012-02-21 04:53:34

标签: android sensor shake motion-detection screen-lock

在我的应用程序中,我想检测抖动事件,并且我正在使用SensorEventListener,当我的活动在前台运行时,代码工作正常。但是当我按下手机的锁定按钮来锁定屏幕时,无法检测到震动事件。我在三星gts5360上测试了我的代码。但是相同的代码在sony ericssion xperia mini pro上运行良好。实际上,当我让设备闲置大约时,我的三星手机没有检测到震动事件。锁定设备后45秒。

然后我摇动手机,它没有检测到震动,但是当我在几秒钟之后晃动手机时它开始听摇动。我的三星手机的这种行为并不一致。它会在一段随机时间后开始和停止聆听震动事件。

现在我的问题是“这是Android设备在屏幕锁定/关闭时没有检测到震动事件的功能吗?”。

如果是,那么我的三星手机在锁定手机几秒钟后如何开始/停止收听?

在“Sony ericssion xperia mini pro”中,当屏幕锁定/关闭时,它是如何持续收听震动事件的??

此功能是否因供应商而异?

如果某个身体需要我的代码然后告诉我,我会提供它。

1 个答案:

答案 0 :(得分:0)

问题是很长一段时间没有一致的标准来确定屏幕熄灭时如何处理传感器。有些设备允许它继续工作,而有些设备则不能。最终Android团队决定,为了使其正常工作,应该为这种操作获取部分唤醒锁:

PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);
PowerManager.WakeLock lock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SensorRead");
lock.acquire();

需要此权限:"android.permission.WAKE_LOCK"

您需要确保在完成唤醒锁定后释放唤醒锁定,以便CPU可以完全进入睡眠状态。

即使这一切都可能无效。我发现LG手机最近不太可能支持背景传感器。此外,许多摩托罗拉手机不需要唤醒锁定,而只需在屏幕熄灭时重新注册传感器。