读取iPhone的环境光传感器

问题描述 投票:22回答:5

我注意到在我的iPhone上,在阳光直射的几秒钟后,屏幕会调整变得更亮,更暗等。 我想知道是否有一种方法可以与这个传感器互动?

我有一个应用程序,是在室外使用的。 当你进入直射光线时,在屏幕调整之前,你很难看到屏幕几妈的情况。 而且即使这样,也不总是像我希望的那样明亮。 我想实现室外观看时用高对比度的皮肤,室内观看时用低对比度的皮肤。

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

我假设有一个光线传感器,但是,相机知道何时使用闪光灯。

objective-c ios cocoa-touch iphone-4
5个回答
6
投票

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


23
投票

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

从0.12(暗)到0.99(亮)。

下一行会得到这些数值,试一试,在设备上放一些光和关灯,得到不同的数值。

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

很明显,自动亮度功能应该被打开,以使其工作。

请注意。


13
投票

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

http:/iphonedevwiki.netindex.phpAppleISL29003

http:/iphonedevwiki.netindex.phpIOKit.framework。

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

我不断在iOS论坛上询问未来是否会支持环境光传感器读数,但没有结果。


8
投票

实际上,你可以使用相机来做这件事,这与用户的屏幕亮度设置无关(即使在自动亮度为OFF的情况下也能工作)。

你可以从视频帧的元数据中读取亮度值,正如我在 这个Stack Overflow答案.


1
投票

对于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 )
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.