2

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

此线程中有一个部分有效的解决方案。它依赖于一个次优的私有 API,但更糟糕的是,它可以在我测试过的三分之一的设备上运行。我的目标是 Android 4.03 及更高版本,我正在测试 Galaxy S3、Galaxy Nexus 和 Nexus 4。我链接到的解决方案适用于 GN。在 Nexus 4 上,它什么都没有(看到官方的 androidnadroid 拨号器使用相同的代码并且它在那里工作,我觉得特别令人费解。在 S3 上,获取 wakeLock 似乎执行与按下电源按钮相同的操作(锁定手机,从而关闭接近传感器)。

由于调用 powerManager.goToSleep 需要需要手机根目录的权限,因此无法设置屏幕亮度(并且在我的 3 部手机中的任何一部上都无法正常工作 - 我可以改变亮度但永远无法转动屏幕)关闭),唯一的另一种方法似乎是另一个私有 API(setScreenState - 在我的情况下,这意味着 Java 互操作,因为我正在使用 Mono4Android),我想知道 - 有没有办法全面完成这项工作,或者是这只是我们不应该做的事情之一?尽管如此,仍然有很多呼叫应用程序需要这种功能,所以世界上的 Skypes、Vibers & Co. 需要以某种方式解决这个问题,我会很感激一些洞察力,因为我的智慧已经走到了尽头.

4

1 回答 1

0

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

于 2013-01-25T18:52:55.363 回答