强制锁定屏幕

ran*_*dom 6 iphone objective-c ios 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
}
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用.还有其他选择吗?市场上有一款名为CellControl的应用程序可以做到这一点,所以我知道它是可能的,似乎无法弄清楚如何.

我也试过从这个答案中取得的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);
  //...
}
Run Code Online (Sandbox Code Playgroud)

首次启动应用时,他们会要求获得以下许可:

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

我不知道这些框架中的任何一个是否能让你锁定屏幕,但也许?...


快速更新:

经过JBA的一些研究和巨大帮助后,我越来越接近解决方案了.似乎Cell Control充当键盘外围设备,允许它们发送锁定屏幕的命令.所以我买了一个蓝牙键盘,试着猜猜是什么......就像魅​​力一样.我可以从中锁定和解锁我的设备.所以我把键盘连接到我的mac(通过蓝牙)来嗅探数据包.在键盘上按下锁定按钮时会记录此事件:

在此输入图像描述

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

JBA*_*JBA 9

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

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

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

===编辑===

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