强制locking屏幕

我试图在给定的时间段后自动locking设备。 我所看到的唯一能做到这一点的就是这样做:

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 } 

但它似乎并不奏效。 还有其他的select吗? 市场上有一个名为CellControl的应用程序,它可以做到这一点,所以我知道这是可能的,但似乎无法弄清楚。

我也尝试了obj-c从这个答案

这里是他们从公共应用程序商店下载的应用程序的剪辑。 你可以看到,一旦我点击主页button并退出应用程序,他们强制locking屏幕。

在这里输入图像说明

我也看到使用私有框架,这肯定会被拒绝:

 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); //... } 

当第一次启动应用程序,他们要求许可:

  • 即使不使用应用程序,也可以将数据提供给蓝牙设备
  • 发送推送通知
  • 访问联系人
  • 访问麦克风
  • 即使不使用应用程序,也可以使用位置

我不知道这些框架是否会给你locking屏幕的能力,但也许呢?


快速更新:

经过JBA的更多研究和巨大的帮助,我正在接近一个解决scheme。 Cell Control看起来像键盘外设,允许他们发送一个命令来locking屏幕。 所以,我买了一个蓝牙键盘,试图猜测什么…作品像魅力。 我可以从中locking和解锁设备。 所以我把键盘连接到我的mac(通过蓝牙)来嗅探数据包。 在键盘上按下lockingbutton时会logging此事件:

在这里输入图像说明

从我所知道的(我绝不是这方面的专家),是要触发一个锁,它发送的只是一个鼠标事件,所有的事件数据都被清空了。 随着没有button按任一。 我的目标是在Arduino上复制这个…所以还有更多的工作要做。

如果你想知道他们如何做到这一点:

手机与其硬件中包含的蓝牙设备配对。 如果你进一步检查,你会发现这个蓝牙设备有“键盘”configuration文件:只要检查你的手机,你会看到它被认为是一个无线键盘…有趣的…你看到答案来了吗? …

你打赌! 设备向手机发送locking屏幕命令键,就好像它是一个连接的蓝牙键盘(是的,因为BT键盘实际上可以做到这一点)。 在这里,你走了。

===编辑===

请看看这个HID使用表 ,你会发现一些有用的命令代码。 我们正在寻找的关键代码可能是0x810x82

联系苹果开发者技术支持后,没有支持的方式来实现这个function,而不使用私人API。 使用这些将导致您的应用程序被拒绝。

我的猜测是,CellControl能够通过审查,因为他们使用这个function的唯一方法是,如果你的车上安装了他们的硬件,设备配对,并开始驾驶。 我的猜测是,在应用程序审查期间,苹果没有购买他们的设备之一,实际上testing它。 虽然我一直觉得他们扫描你的二进制文件来检查无证API的使用,但似乎是错误的。

@Chris提到的另一种可能性是,他们可能在开始开发之前与苹果公司进行了一次安排。 虽然这似乎不太可能,但这是可能的。

以下是苹果开发者技术支持的摘录:

感谢您联系Apple开发者技术支持(DTS)。 我们的工程师已经审查了您的要求,并得出结论认为,在目前的运输系统configuration下,没有支持的方式来实现所需的function。


你好,

开发者技术支持不能以您的名义对其他开发者的软件进行反向工程。 做看似不可能的事情的应用程序通常分为两类:

  • 他们违反规则,应用程序审查还没有抓到他们(A)

  • (B)他们的营销材料是经济的,

我可以说,没有支持从iOS应用程序locking设备的方式。


希望这有助于未来的人。