物镜c - 读取iPhone的环境光传感器



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

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

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

然而,我认为有一个光传感器,因为相机知道何时使用闪光灯。

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

从0.12(深色)到0.99(浅色)

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

NSLog(@"Screen Brightness: %f",[[UIScreen mainScreen] brightness]);

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

谨致问候。

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

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

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

然而,这需要私人标头,所以如果你使用它,苹果可能不会让你的应用进入应用商店。

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

您实际上可以使用相机来实现这一点,这与用户的屏幕亮度设置无关(即使"自动亮度"处于关闭状态也能工作)。

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

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

对于iOS 14及以上版本,苹果提供了SensorKit(https://developer.apple.com/documentation/sensorkit/srsensor/3377673-ambientlightsensor),用于显式访问各种传感器和系统日志(调用日志、消息日志等)。除了原始勒克斯值,您还可以获得环境光的色度和相对于设备传感器的方向。

(发件人https://developer.apple.com/documentation/sensorkit/srambientlightsample)

测量光照水平

var色度:SRAmbientLightSample.色度坐标对描述样品的光亮度和色调。

struct SRAmbientLightSample.Chromacity一个坐标对描述了灯光的亮度和色调。

var lux:测量描述样品的光通量。

var放置:SRAmbientLightSample.SensorPlacement灯光的相对于传感器的位置。

enum SRAmbientLightSample.SensorPlacement方向值描述光源相对于传感器的位置。

但是,您需要申请批准才能接受此类应用程序并在App Store上发布。

对于Swift 5,以下是如何使用亮度检测,间接为您提供外部亮度:

/// A view controller (you can use any UIView or AnyObj)
class MyViewConroller: UIViewController { 
    /// Remove observers on deinit
    deinit {
        removeObservers()
    }
    // MARK: - Observers management helpers
    /// Add my observers to the vc
    func addObservers() {
        NotificationCenter.default.addObserver(self, selector: #selector(onScreenBrightnessChanged(_:)), name: UIScreen.brightnessDidChangeNotification, object:nil)
    }
    /// Clean up observers
    func removeObservers() {
        NotificationCenter.default.removeObserver(self)
    }
    /// Load the views
    func loadView() {
        // Add my observes to the vc
        addObservers()
    }
    /**
    Handles brightness changes
    */
    @objc func onScreenBrightnessChanged(_ sender: Notification) {
        // Tweak as needed: 0.5 is a good value for me
        let isDark = UIScreen.main.brightness < 0.5.   // in 0...1
        // Do whatever you want with the `isDark` flag: here I turn the headlights off
        vehicle.turnOnTheHeadlights( isDark )
    }
}

最新更新