2

在我的应用程序中,我想检测抖动事件并且我正在使用 SensorEventListener,当我的活动在前台运行时,代码工作正常。但是当我按下手机的锁屏键锁屏时,却检测不到摇晃事件。我已经在三星 gts5360 上测试了我的代码。但相同的代码在索尼爱立信 xperia mini pro 上运行良好。实际上,当我让设备闲置大约 10 分钟时,我的三星手机并没有检测到震动事件。锁定设备后 45 秒。

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

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

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

以及如何在“Sony ericssion xperia mini pro”中锁定/关闭屏幕时连续收听抖动事件?

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

如果有人需要我的代码,请告诉我,我会提供。

4

1 回答 1

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 手机不太可能支持背景传感器。许多摩托罗拉手机也不需要唤醒锁定,而是只需要在屏幕关闭时重新注册传感器。

于 2012-10-11T13:09:37.313 回答