Objective c 阅读iPhone';s环境光传感器

Objective c 阅读iPhone';s环境光传感器,objective-c,ios,cocoa-touch,iphone-4,Objective C,Ios,Cocoa Touch,Iphone 4,我注意到在我的iPhone上,在阳光直射下几秒钟后,屏幕将调整为更亮、更暗等。我想知道是否有办法与此传感器交互 我有一个在外面使用的应用程序。当你进入直射光时,在屏幕调整之前,你很难在几分钟内看到屏幕。即使这样,它也不总是像我希望的那样明亮。我想在室外观看时使用高对比度皮肤,在室内观看时使用低对比度皮肤 可以读取光传感器数据吗?如果可以,如何提取这些传感器值 但是,我假设有一个光传感器,因为相机知道何时使用闪光灯。尝试使用GSEventSetBacklightLevel(),需要。这就是如何通过

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

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

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


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

尝试使用
GSEventSetBacklightLevel(),需要
。这就是如何通过编程调整亮度级别。还有一个
get
选项,因此我认为它可能包含您想要的信息。

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

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


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

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

从0.12(暗)到0.99(亮)

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

NSLog(@"Screen Brightness: %f",[[UIScreen mainScreen] brightness]);
显然,自动亮度功能应该打开,以使其工作


注意。

您实际上可以使用摄像头来完成此操作,这与用户的屏幕亮度设置无关(即使自动亮度关闭也可以工作)


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

对于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 )
    }
}
///视图控制器(您可以使用任意UIView或任意OBJ)
类MyViewConroller:UIViewController{
///除去脱硝剂上的观察者
脱硝{
removeObservers()
}
//马克:-观察员管理助手
///将我的观察者添加到vc
func addobsers(){
NotificationCenter.default.addObserver(self,selector:#selector(屏幕上的RightnessChanged(:)),名称:UIScreen.BrighnessDidChangeNotification,对象:nil)
}
///清理观察员
func removeObservers(){
NotificationCenter.default.removeObserver(自)
}
///加载视图
func加载视图(){
//将我的评论添加到vc
addObservers()
}
/**
处理亮度变化
*/
@objc func onScreenBrightnessChanged(uu发件人:通知){
//根据需要调整:0.5对我来说是一个很好的值
让isDark=UIScreen.main.brightness<0.5//在0…1中
//你想用“isDark”旗做什么都行:我来把车头灯关掉
车辆.打开前灯(isDark)
}
}

@George,好的,请阅读当前设置,并在更改时设置通知。然后您可以相应地进行调整。对不起,我没有看到此
get
选项。你能发一个链接吗?非常聪明,很有魅力D尽管根据Apple docs的说法,它并没有从0.12变为0.99:“这个属性的值应该是一个介于0.0和1.0之间的数字,包括在内。”
UIScreen
也会在级别改变时发布
UIScreenRightnessDidChangeNotification
。这个问题(以及)我在这个主题上做的大多数S.O.搜索都不会出现。即使知道问题和答案在这里,我也找不到。幸运的是,我在我的代码中的注释中添加了一个链接。我已经编辑了一些我希望会在结果中显示的内容的标题-如果这不合适,请道歉!这个能打开照相机吗?因此也要请求用户允许这样做吗?是的,会的。相机的任何使用都会做到这一点。它也会比环境光传感器使用更多的电池,而在我的使用案例中,环境光传感器无法达到这一目的。