检测iPhone是否在黑暗的房间里
有没有办法使用iPhone接近传感器来检测手机是否在没有光线的房间里?
这个问题似乎意味着这是不可能的… iPhone是否允许光传感器作为input?
这里有一个简单的方法来使用相机来了解一个场景的亮度。 (很显然,它只能读取在相机视野中可以“看到”的数据,所以它不是一个真正的环境光线传感器…)
使用AVFoundation框架,设置一个videoinput,然后使用ImageIO框架读取每个videoinput帧的元数据(您可以忽略实际的video数据):
#import <ImageIO/ImageIO.h> - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { CFDictionaryRef metadataDict = CMCopyDictionaryOfAttachments(NULL, sampleBuffer, kCMAttachmentMode_ShouldPropagate); NSDictionary *metadata = [[NSMutableDictionary alloc] initWithDictionary:(__bridge NSDictionary*)metadataDict]; CFRelease(metadataDict); NSDictionary *exifMetadata = [[metadata objectForKey:(NSString *)kCGImagePropertyExifDictionary] mutableCopy]; float brightnessValue = [[exifMetadata objectForKey:(NSString *)kCGImagePropertyExifBrightnessValue] floatValue]; }
现在,您已经更新了场景的亮度值(通常,您可以configuration此值),每秒15-30次。 较低的数字是较暗的。
接近传感器不是你应该寻找的。 它是环境光线传感器。 显然,API是没有logging或根本不可用的开发人员。 另一种检测iPhone是否在黑暗的房间的方法是使用相机并获得光度。 这里有一个很好的指导如何做到这一点,
http://b2cloud.com.au/tutorial/obtaining-luminosity-from-an-ios-camera/
虽然可以通过IOKit框架访问环境光线传感器数据,但是苹果不鼓励开发者使用它,任何使用它的应用程序都会被App Store拒绝。
但有可能通过相机大致推导出环境的光度。 这是通过AVFoundation框架实现相机,并处理通过每个相机帧来的元数据。 参考这个问题的答案: 如何从AVFoundation获取光照值