阅读iPhone的环境光传感器

Geo*_*ton 22 cocoa-touch objective-c ios iphone-4

我注意到在我的iPhone上,在阳光直射几秒钟后,屏幕将调整为更亮,更暗.等我想知道是否有办法与这个传感器进行交互?

我有一个在外面使用的应用程序.当你进入直接光线时,在调整之前很难看到屏幕上的几个元素.即便如此,它并不总是像我希望的那样明亮.我想在户外观看时使用高对比度皮肤,在室内观看时使用低对比度.

这是否可以读取光传感器数据,如果是这样,我如何提取这些传感器值?

我会假设有一个光传感器,因为相机知道何时使用闪光灯.

Fra*_*rez 22

另一方面,这是一个不同的想法(可能是一个愚蠢的想法),使用设备屏幕的亮度,你可以获得一些外部条件的价值.

从0.12(暗)到0.99(光)

下一行将获得这些值,尝试一下,在设备上打开和关闭一些灯以获得不同的值.

NSLog(@"Screen Brightness: %f",[[UIScreen mainScreen] brightness]);
Run Code Online (Sandbox Code Playgroud)

显然应该打开自动亮度功能,以使其工作.

问候.

  • 当水平发生变化时,`UIScreen`也会发布`UIScreenBrightnessDidChangeNotification`. (3认同)
  • 非常聪明,像魅力一样!:D虽然根据Apple文档,它不会从0.12变为0.99:"此属性的值应该是介于0.0和1.0之间的数字." (2认同)

小智 12

要读取环境光传感器数据,您需要在IOKit框架中使用IOHID.

http://iphonedevwiki.net/index.php/AppleISL29003

http://iphonedevwiki.net/index.php/IOKit.framework

但是,这需要私有标头,因此如果您使用它,Apple可能不会让您的应用程序进入应用程序商店.

我不断向iOS论坛询问将来是否会支持环境光传感器读数,但无济于事.


Wil*_*ker 8

您实际上可以使用相机执行此操作,这与用户的屏幕亮度设置无关(即使自动亮度关闭也可以使用).

您可以从视频帧的元数据中读取亮度值,正如我在此Stack Overflow回答中所解释的那样.


Pen*_*One 5

尝试使用GSEventSetBacklightLevel();,这需要<GraphicsServices/GraphicsServices.h>.这是人们可以通过编程方式调整亮度级别的方法.还有一个get选项,所以我认为可能有你想要的信息.