android:基于JB上的接近传感器关闭屏幕

时间:2013-01-21 20:15:03

标签: android screen proximity

我需要在我的应用程序中复制股票拨号器的功能 - 当接近传感器检测到手机靠近我的脸时,关闭屏幕,然后当我将手机从我脸上拿开时将其重新打开。

this thread中有一个部分有效的解决方案。它依赖于一个不是最理想的私有API,但更糟糕的是,它在我测试过的3个设备中的一个上工作。我的目标是Android 4.03及更高版本,我正在测试Galaxy S3,Galaxy Nexus和Nexus 4.我联系的解决方案适用于GN。在Nexus 4上,它没有任何意义(我发现official androidnadroid dialer使用相同的代码并且它在那里工作时特别令人费解。在S3上,获取wakeLock似乎执行与推动它相同的动作电源按钮(锁定手机,从而关闭接近传感器)。

由于调用powerManager.goToSleep需要权限,这需要一个手机根,这是不在桌面上,设置屏幕亮度似乎命中和错过(并且在我的3部手机中任何一个都无法正常工作 - 我可以改变亮度但从未设法关闭屏幕)和唯一的另一种方式似乎是另一个私有API(setScreenState - 在我的情况下将意味着Java互操作,因为我正在使用Mono4Android),我想知道 - 有没有办法全面完成这项工作,或者这只是我们不应该做的事情之一?尽管如此,还是有很多需要这些功能的呼叫应用程序,所以Skype,Vibers&世界公司需要以某种方式解决这个问题,并且我很欣赏一些见解,因为我的智慧已经结束了。

1 个答案:

答案 0 :(得分:0)

这是我在此期间学到的东西 - 除非呼叫状态不是空闲,否则不要尝试获取特殊的唤醒锁。如果有一个电话,锁定工作,但有一个问题: 在Google手机上(尝试使用GN和G4),即使屏幕关闭,活动也会保持活动状态。在我的S3上,一旦我获得锁定,活动就会停止(不会暂停......停止!)。因此,您需要编写代码以保持接近传感器处于活动状态(我在onPause之后取消注册,导致我认为它在S3上不起作用) - 必须保持传感器停止活动肯定会使对你来说更难的事情,但它仍然可行。