【发布时间】:2011-04-26 09:33:17
【问题描述】:
有没有办法以编程方式关闭 iOS 中的显示?不仅仅是调低亮度,而是像电话应用程序那样关闭。我很乐意使用私有 API,因为这是供个人使用的。
谢谢!
【问题讨论】:
-
你能说说为什么电源按钮不适合你吗?
标签: iphone ios iphone-privateapi
有没有办法以编程方式关闭 iOS 中的显示?不仅仅是调低亮度,而是像电话应用程序那样关闭。我很乐意使用私有 API,因为这是供个人使用的。
谢谢!
【问题讨论】:
标签: iphone ios iphone-privateapi
您可以通过启用接近监控来关闭显示。通过将手机靠近耳朵或将手指放在手机顶部的红外传感器上,它会自动关闭屏幕,就像在电话应用中一样。
[UIDevice currentDevice].proximityMonitoringEnabled = YES;
【讨论】:
您可以这样做,(当然,当然是使用私有 API):
在 iOS5 上:
#include <stdio.h>
#include <dlfcn.h>
int (*SBSSpringBoardServerPort)() = (int (*)())dlsym(RTLD_DEFAULT, "SBSSpringBoardServerPort");
int port = SBSSpringBoardServerPort();
void (*SBDimScreen)(int _port,BOOL shouldDim) = (void (*)(int _port,BOOL shouldDim))dlsym(RTLD_DEFAULT, "SBDimScreen");
然后使用
SBDimScreen(port,YES);
只要你想变暗,并且
SBDimScreen(port,NO);
只要你想取消暗淡。
在 iOS6 上:
void (*BKSDisplayServicesSetScreenBlanked)(BOOL blanked) = (void (*)(BOOL blanked))dlsym(RTLD_DEFAULT, "BKSDisplayServicesSetScreenBlanked");
然后使用:
BKSDisplayServicesSetScreenBlanked(1); // 1 to dim, 0 to undim
这里的“暗淡”是指完全关闭屏幕。这是系统在例如通话中发生接近事件。
【讨论】:
我知道的唯一方法,无论是公开的还是私人的,都是使用电源按钮。
你可以看看-[UIApplication setProximitySensingEnabled:(BOOL)],或者-[UIApplication setIdleTimerDisabled:YES],这可能会带来一些有用的东西
【讨论】:
你试过了吗:
[[UIScreen mainScreen] setBrightness: yourvalue];
所以问题 8936999:iPhone: How can we programmatically change the brightness of the screen?
【讨论】:
Proximity 并非在所有设备上都有效。这个问题有一个更简单的解决方案,无需借助私有 API。
斯威夫特
UIScreen.main.wantsSoftwareDimming = true
UIScreen.main.brightness = 0.0
没有wantsSoftwareDimming,背光将永远不会完全关闭。
文档中有这样的警示句:
默认值为假。启用它可能会导致性能下降。
【讨论】:
我认为除了改变亮度之外没有任何关闭显示器(模拟 iphone 睡眠按钮)的方法。
这个link 可能会有所帮助。
【讨论】:
GSEventSetBacklightFactor 从未成为官方 SDK 的一部分,原因很简单,Apple 不希望您能够调整屏幕亮度或将其关闭,而不是他们想要的能够代表用户拨打电话或在应用商店购买。