【问题标题】:How to programatically detect backlight is on in iOS?如何以编程方式检测 iOS 中是否开启背光?
【发布时间】:2012-08-03 17:39:09
【问题描述】:

我希望 iOS 代码可以显示屏幕是否亮起,以便我的应用可以监控由于(耗电)背光活动而导致的电池电量消耗。此代码必须仅使用公共 API,因为我打算最终将应用程序提交到 App Store。

最初我认为这可能只是检查 UIScreen 的 brightness 属性的问题,如下所示:

-(BOOL)isBackLightOn {
    float brightness = [UIScreen mainScreen].brightness;
    return brightness > 0;
}

但这是不正确,因为[UIScreen mainScreen].brightness代表用户在设置->亮度屏幕中选择的滑块的值,不是当前的光输出屏幕。

Apple 显然有办法确定这个值,因为它包含在可以在 Instruments 中查看的能量诊断中(例如,请参阅 Logging Energy Usage in an iOS Device),但也许这个测量值尚未通过公共 API 公开?

【问题讨论】:

    标签: objective-c ios backlight


    【解决方案1】:

    一个可能对你有帮助的问题是:

    Changing Backlight Level, iPhone

    似乎如果你包括这个:

    #include "GraphicsServices.h"
    

    然后使用这样的东西:

    NSNumber *bl = (NSNumber*) CFPreferencesCopyAppValue(CFSTR("SBBacklightLevel" ), CFSTR("com.apple.springboard"));
    float previousBacklightLevel = [bl floatValue];
    

    应该给你背光级别。请记住,屏幕总是会有某种形式的背光。

    【讨论】:

    • 抱歉,我应该明确指出需要通过公共 API 执行此操作(因为我希望在某个时候将应用程序提交到 App Store)。我将编辑问题以说明这一点。
    • 这是什么#include "GraphicsServices.h" ?
    • @HiRen GraphicsServices 是 iOS SDK 的一部分。
    • @Flipper 每当我尝试实现它时都会给我错误,例如找不到文件,您尝试过吗?
    【解决方案2】:

    首先我尝试了@Flipper 的答案,但它对我没有多大帮助,然后我对此进行了研发,我找到了使用以下代码的解决方案

        NSLog(@"%f", [[[NSMutableDictionary dictionaryWithContentsOfFile:@"/var/mobile/Library/Preferences/com.apple.springboard.plist"] objectForKey:@"SBBacklightLevel2"] floatValue]);
    

    它给了我浮点值,设备的当前亮度级别

    【讨论】:

      猜你喜欢
      • 2014-02-15
      • 2020-10-03
      • 2012-09-19
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      相关资源
      最近更新 更多