我正在尝试在一定时间后自动锁定设备。唯一能实现这个功能的方法是这样做:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
UIApplication.sharedApplication().idleTimerDisabled = true
NSTimer.scheduledTimerWithTimeInterval(30, target: self, selector: "lockScreen", userInfo: nil, repeats: false)
return true
}
func lockScreen() {
print("locking screen")
UIApplication.sharedApplication().idleTimerDisabled = false
}
然而它似乎不起作用。有其他的替代方案吗?市场上有一个叫做CellControl的应用程序可以做到这一点,所以我知道这是可能的,只是似乎无法弄清楚如何实现。
我还尝试过从this answer中使用obj-c。
这是他们的应用程序工作的片段,可以从公共应用商店下载。你可以看到,一旦我按下主页按钮并退出应用程序,他们就会强制锁定屏幕。
我也见过使用私有框架的情况,这肯定会被拒绝:
char *gsDylib = "/System/Library/PrivateFrameworks/GraphicsServices.framework/GraphicsServices";
void *handle = dlopen(gsDylib, RTLD_NOW);
if (handle) {
BOOL locked = FALSE;
void (*_GSEventLockDevice)() = dlsym(handle, "GSEventLockDevice");
if (_GSEventLockDevice) {
_GSEventLockDevice();
//...
}
dlclose(handle);
//...
}
当第一次启动应用程序时,它们会请求以下权限:
- 即使不使用应用程序,也可向蓝牙设备提供数据
- 发送推送通知
- 访问联系人
- 访问麦克风
- 即使不使用应用程序,也可使用位置
我不知道这些框架中是否有任何一个可以让您锁定屏幕,但也许可以?...
快速更新:
经过更多的研究和JBA的大力帮助,我离解决方案越来越近了。看起来Cell Control充当了键盘外设,使他们能够发送锁定屏幕的命令。所以我买了一个蓝牙键盘去尝试,结果很不错。我能够用它来锁定和解锁我的设备。因此,我将键盘与我的Mac(通过蓝牙)连接以嗅探数据包。当在键盘上按下锁定按钮时,就会记录此事件:
据我所知(我绝不是这方面的专家),触发锁定的方法是发送一个鼠标事件,所有事件数据都被清零。同时没有按下任何按钮。我的目标是在Arduino上复制这个过程...还有更多工作要做。