GSEventSetBacklightLevel(BrightnessSlider.value);
[[UIApplication sharedApplication] setBacklightLevel:BrightnessSlider.value];
iOS UIScreen 具有亮度属性。将其设置为不同的值会更新屏幕亮度。但是在锁定/解锁后屏幕亮度会恢复到 iOS 设置中设置的亮度。
我必须打电话来保存设置吗?有同步通话之类的吗?
这是越狱开发,没有“沙盒”。</p>
这个UIApplication
setBacklightLevel:
电话确实是暂时的。
但是,如果您查看在 SBSettings 中切换(更改)亮度级别的代码,那是一个永久设置。我仍然认为亮度的任何变化也会受到用户是否打开“设置”->“亮度”->“自动亮度”功能的影响。 自动亮度将动态调整屏幕亮度。
如您所见,通过将新的亮度级别写入com.apple.springboard.plist文件来实现永久亮度更改:
NSMutableDictionary* Prefs = [NSMutableDictionary dictionaryWithContentsOfFile:@"/var/mobile/Library/Preferences/com.apple.springboard.plist"];
if(Prefs != nil)
{
NSLog(@"Prefs != nil\n");
float CurrentBacklight1 = [[Prefs objectForKey:@"SBBacklightLevel"] floatValue];
float CurrentBacklight2 = [[Prefs objectForKey:@"SBBacklightLevel2"] floatValue];
NSNumber* Number = [NSNumber numberWithFloat:CurrentBacklight];
if(CurrentBacklight2 > 0)
{
NSLog(@"CurrentBacklight2 = %f\n", CurrentBacklight2);
[Prefs setObject:Number forKey:@"SBBacklightLevel2"];
}
if(CurrentBacklight1 > 0)
{
NSLog(@"CurrentBacklight1 = %f\n", CurrentBacklight1);
[Prefs setObject:Number forKey:@"SBBacklightLevel"];
}
[Prefs writeToFile:@"/var/mobile/Library/Preferences/com.apple.springboard.plist" atomically:YES];
}
其中包含您看到 SpringBoard恢复到的值。然后,更改也将临时应用到您正在使用的代码中:
[[UIApplication sharedApplication] setBacklightLevel:BrightnessSlider.value];
这两个变化的结合应该可以得到你想要的。
Class $SBBrightnessController = objc_getClass("SBBrightnessController");
[[$SBBrightnessController sharedBrightnessController] _setBrightnessLevel:BrightnessSlider.value showHUD:YES];
Objective-C 运行时的乐趣 :)