强制锁定屏幕

时间:2016-02-18 18:01:11

标签: ios objective-c iphone swift

我试图在给定的时间段后自动锁定设备。我见过的唯一能让这成为可能的是:

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

这是他们的应用工作的剪辑,从公共应用商店下载。您可以看到,只要我按下主页按钮并退出应用程序,它们就会强行锁定屏幕。

enter image description here

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

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(通过蓝牙)来嗅探数据包。在键盘上按下锁定按钮时会记录此事件:

enter image description here

从我所知道的(我不是这方面的专家),是触发锁定,所有它发送的是一个鼠标事件,所有事件数据都被清零。除了按下任何按钮之外。我的目标是在Arduino上复制这个......所以还有更多的工作要做。

3 个答案:

答案 0 :(得分:8)

如果您想知道他们是如何做到的:

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

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

===编辑===

请看一下这个HID usage table,你会发现一些有用的命令代码。我们正在寻找的关键代码很可能是 0x81 0x82

答案 1 :(得分:4)

与Apple Developer技术支持部门联系后,如果不使用私有API,则无法支持实现此功能的方法。使用这些将导致您的应用被拒绝。

我的猜测是,CellControl能够通过审核来实现,因为他们使用此功能的唯一方法是,如果您的车辆安装了硬件,设备与之配对,并开始驾驶。我的猜测是,在应用程序审核期间,Apple没有购买他们的设备并实际测试它。虽然我一直认为他们会扫描你的二进制文件以检查未记录的API使用情况,但这似乎是错误的。

@Chris提到的另一种可能性是他们可以在开始开发之前与Apple达成协议。虽然这似乎不太可能,但这是可能的。

以下是Apple Developer Technical Support的一些摘录:

  

感谢您与Apple开发者技术支持(DTS)联系。我们的工程师已经审核了您的请求,并得出结论认为,根据当前出货的系统配置,没有支持的方法来实现所需的功能。

  

您好,

     

开发人员技术支持部门无法代表您对其他开发人员的软件进行逆向工程。正在做看似不可能的事情的应用程序通常分为两类:

     
      
  • 他们违反了规则,App Review还没有抓住他们(A)

  •   
  • 他们的营销材料经济实惠(B)

  •   
     

我可以说没有支持的方法可以锁定iOS应用中的设备。

希望这有助于将来。

答案 2 :(得分:0)

经过长时间的研究,我发现无法以编程方式锁定屏幕。但是我发现有两种思考方法: 1.越狱iOS设备; 2.使用MDM技术来实现。但这将是一项巨大的工作。我们需要构建服务器来处理与iOS设备的通信。