2

我正在制作一个需要在用户摇动手机时打开/关闭屏幕的应用程序。到目前为止,我已经有了一个 SensorEventListener 来监听这个问题的答案中建议的震动。

当我检测到抖动时,我会按照此问题的答案中的建议更改屏幕亮度的值。如果我实际上不关闭屏幕,这一切都很好......如果我通过该public void setBright(float value)方法将亮度设置为 0.01f,它就可以完美运行。但是,如果我将亮度设置为 0.0f,手机将不会再次转动屏幕……至少在我按下电源按钮之前不会。

我正在尝试做的事情可能吗?我究竟做错了什么?

- 编辑 -

感谢Dreicyerasor,我进一步研究了这个问题。我在将亮度设置为 0.0f 之前获得了PARTIAL_WAKE_LOCK,但是当我摇晃手机时它仍然无法打开。但是,当我调试应用程序时,我发现当我在屏幕关闭的情况下摇动手机时 setBright(1.0f) 会被调用;我怀疑锁屏在某种程度上弄乱了它,因为当我按下电源按钮时它就会启动。在我按下电源按钮后,该应用程序继续像往常一样工作。有没有办法绕过锁屏?

谢谢你的帮助!

4

2 回答 2

1

只是一个猜测:将其设置为 brighnes 0.0 也可能使手机进入睡眠模式?

当您想以编程方式再次打开它时,请尝试获取 ACQUIRE_CAUSES_WAKEUP 唤醒锁:

PowerManager pm = (PowerManager)mContext.getSystemService(
                                          Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(
                                      PowerManager.SCREEN_BRIGHT_WAKE_LOCK
                                      | PowerManager.ACQUIRE_CAUSES_WAKEUP,
                                      TAG);
wl.acquire(1000);
于 2011-03-06T22:59:03.590 回答
1

但是,我同意 icyerasor 的猜测——如果猜测正确并且手机将进入睡眠状态,则在将亮度设置为 0.0之前,PARTIAL_WAKE_LOCK您必须先获取 a以保持 CPU 处于唤醒状态

我会在回答之前对此进行测试,但目前我无法访问 Android 设备。

于 2011-03-06T23:05:08.843 回答