[英]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.