繁体   English   中英

读取 iPhone 的环境光传感器

[英]Reading the iPhone's Ambient Light sensor

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

我有一个在外面使用的应用程序。 当您将 go 置于直射光下时,在调整之前,您很难在几分钟内看到屏幕。 即便如此,它并不总是像我希望的那样明亮。 我想为户外观看实现高对比度皮肤,为室内观看实现低对比度。

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

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

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

从 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

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

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

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

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

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

对于 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 )
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM