检测iPhone是否在黑暗的房间里

Apo*_*llo 12 iphone ios

有没有办法使用iPhone接近传感器来检测手机是否在没有光线的房间?

这个问题似乎意味着这是不可能的...... iPhone是否允许光传感器作为输入?

Wil*_*ker 27

这是使用相机找出场景有多亮的一种更简单的方法.(显然,它只读取可以在相机视野中"看到"的数据,因此它不是真正的环境光传感器...)

使用AVFoundation框架,设置视频输入,然后使用ImageIO框架,读取视频源的每一帧进入的元数据(您可以忽略实际的视频数据):

#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];
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以更新场景的亮度值(通常 - 您可以配置此值)每秒15-30次.较低的数字较暗.

  • 只是想感谢你并确认它在iOS8上也有效 (2认同)

sle*_*rfx 6

接近传感器不是您应该寻找的.它是环境光传感器.显然,API没有文档或根本不可用于开发人员.检测iPhone是否处于黑暗房间的另一种方法是使用相机并获得亮度.这是一个很好的指导如何做到这一点,

http://b2cloud.com.au/tutorial/obtaining-luminosity-from-an-ios-camera/

  • 很遗憾您没有获得该传感器的官方访问权限。 (2认同)

Ste*_*her 5

基于Wildaker代码的Swift 4.2 版本。Xcode 10 拒绝让它成为 Float,但 double 已经起作用了。

func getBrightness(sampleBuffer: CMSampleBuffer) -> Double {
    let rawMetadata = CMCopyDictionaryOfAttachments(allocator: nil, target: sampleBuffer, attachmentMode: CMAttachmentMode(kCMAttachmentMode_ShouldPropagate))
    let metadata = CFDictionaryCreateMutableCopy(nil, 0, rawMetadata) as NSMutableDictionary
    let exifData = metadata.value(forKey: "{Exif}") as? NSMutableDictionary
    let brightnessValue : Double = exifData?[kCGImagePropertyExifBrightnessValue as String] as! Double
    return brightnessValue
}
Run Code Online (Sandbox Code Playgroud)