在我的应用程序中,我想检测摇动事件并且我正在使用 SensorEventListener,当我的 Activity 在前台运行时,代码工作正常。但是当我按下手机的锁定按钮锁定屏幕时,无法检测到摇动事件。我已经在三星 gts5360 上测试了我的代码。但相同的代码在 sony ericssion xperia mini pro 上运行良好。实际上,当我让设备闲置大约 5 分钟时,我的三星手机没有检测到震动事件。锁定设备后 45 秒。
然后我摇动手机,它没有检测到震动,但是当我在几秒钟延迟后摇动手机时,它开始听到震动。我的三星手机的这种行为并不一致。它会在随机时间后开始和停止监听摇动事件。
现在我的问题是“当屏幕锁定/关闭时,设备不会检测到摇动事件,这是 android 功能吗?”。
如果是,那么我的三星手机如何在锁定手机几秒钟后开始/停止收听?
以及在“Sony ericssion xperia mini pro”屏幕锁定/关闭时如何持续监听摇动事件?
此功能是否因供应商而异?
如果有人需要我的代码,请告诉我,我会提供。
最佳答案
问题是很长一段时间以来,对于屏幕关闭时如何处理传感器一直没有统一的标准。有些设备允许它继续工作,而另一些则不允许。最终 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 手机不太可能支持背景传感器。此外,许多摩托罗拉手机不需要唤醒锁,而只需要在屏幕关闭时重新注册传感器。
关于android - 当我的手机屏幕在 android 中关闭时无法检测到摇动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9372367/