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

标签 android sensors shake motion-detection screen-lock

在我的应用程序中,我想检测摇动事件并且我正在使用 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/

相关文章:

android - 如何在摇动设备时刷新应用程序?

android - 以编程方式为从 XML 创建的现有菜单创建子菜单

java - 使用磁力计的简单 compass - Android (Java)

ios - 如何更新 TI SensorTag 以增加加速度计和陀螺仪的每秒时间间隔结果

Android - SensorManager getOrientation 的奇怪行为

ios - 如何让 UIButton 在点击时摇动?

android - 当我的手机处于锁定状态时如何检测摇晃事件

android - 使用 Google API 进行后台位置更新 - Fused Location Provider 不准确

java - Horizo​​ntalScrollView 与 EditText 向右跳转

android - 和引擎唤醒锁