我注意到在我的 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
但是,这需要私有标头,因此如果您使用它,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 )
}
}
对于 iOS 14 及更高版本,Apple 提供了SensorKit ( https://developer.apple.com/documentation/sensorkit/srsensor/3377673-ambientlightsensor ) 用于显式访问各种传感器和系统日志(通话日志、消息日志等) .)。除了原始勒克斯值之外,您还可以获得环境光的色度和相对于设备传感器的方向。
(来自https://developer.apple.com/documentation/sensorkit/srambientlightsample)
测量光照水平
var chromaticity: SRAmbientLightSample.Chromaticity 描述样品的光亮度和色调的坐标对。
struct SRAmbientLightSample.Chromaticity 描述光亮度和色调的坐标对。
var lux:测量 描述样品光通量的对象。
var place: SRAmbientLightSample.SensorPlacement 灯光相对于传感器的位置。
枚举 SRAmbientLightSample.SensorPlacement 描述光源相对于传感器位置的方向值。
但是,您需要请求批准此类应用程序才能被接受并在 App Store 上发布。