当屏幕关闭时传感器无法工作的Android解决方法

7
背景:当屏幕关闭时,许多Android手机不会通过调用onSensorChanged()向应用程序提供加速度计读数的更新。这种行为在S.O.上有所讨论,并在此处进一步记录:http://code.google.com/p/android/issues/detail?id=3708 在某些手机上(例如Nexus S,Droid X2等),只有当值发生显着变化时才会提供加速度计值。例如,在桌子上静止不动时,可能每分钟只有一个或零个更新。
为了生成跨手机型号均可靠的代码,我该如何区分屏幕关闭时缺少更新事件和非运动状态下缺少更新之间的差异?我应该维护一个手机型号数据库吗?

一个好的应用程序实际上会在活动进入后台时注销加速计。 - Wroclai
1
感谢您的评论。这个问题需要回答的一个合法需求的例子可能是一个计步器应用程序,它在服务中注册监听器。 - luser845
感谢您的关注!在2.3+版本中,事实上没有传感器更新意味着没有变化 - 我不需要这些更新。但是,在旧手机/版本上,没有这样的暗示。因此,区分“无运动”和“无信息”的逻辑需要我打开手机类型/Android版本。我对此非常不舒服,特别是考虑到传感器的行为似乎是经验性的而不是在任何官方文档中说明的。 - luser845
此外,强烈表明这也适用于Android 4.0.1。 - zaplec
我成功地让加速度计继续工作,方法是防止屏幕关闭,而是保持开启但变暗。我知道这不是一个好的解决方案,因为它基本上阻塞了Android的一个主要功能。此外,如果屏幕没有通过按电源按钮手动关闭或变暗,则触摸屏幕不会被锁定。根据我在互联网上找到的信息,我认为我们所能做的就是等待谷歌在未来的操作系统版本中修复这个错误。这应该已经在Android 2.3上修复了,但似乎这个错误仍然存在于一些手机上。 - zaplec
显示剩余3条评论
2个回答

0

我已经为这个问题寻找解决方案两天了,但仍然没有找到有用的东西。

在Bruno Albuquerque的这里的帖子中,有一些可以帮助摩托罗拉手机的内容,但它不是通用的。

我相信@jjNford关于制造商掌握这个问题的说法是正确的,你能发布任何相关信息吗?

这里是一个关于该问题的错误报告,日期为2009年。


0

这将很难检测。Android的API提供了一种控制Wake Lock的方法。但是制造商在其操作系统中实现这一点的工作做得非常糟糕,真的很糟糕。您需要获取PARTIAL_WAKE_LOCK以在关闭屏幕时保持手机CPU运行。

然而,并非所有设备都使用此功能,因此不会响应-有些设备半数响应-有些设备响应良好。

在阅读上面的评论后,我可以告诉您,我使用的大多数2.3+设备仍未实现部分唤醒锁定。

个人而言,我不会依赖制造商控制的东西,因为市场如此分散。我会尝试找到其他解决方案来获得我要寻找的功能。

希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接