【问题标题】:How to unlock iOS screen programmatically?如何以编程方式解锁 iOS 屏幕?
【发布时间】:2014-02-11 15:29:19
【问题描述】:

我目前正在探索创建越狱调整。我想解锁手机屏幕。这是怎么做的?在 iOS 7 上可以使用哪些私有 API 来实现这一点?

【问题讨论】:

    标签: jailbreak iphone-privateapi


    【解决方案1】:

    如果我们谈论的是越狱,那么您可以编写一个 SpringBoard 调整来执行此操作(仅限 iOS 7)

    [[objc_getClass("SBBacklightController") sharedInstance] turnOnScreenFullyWithBacklightSource:0];
    [[objc_getClass("SBLockScreenManager") sharedInstance] unlockUIFromSource:0 withOptions:nil];
    

    如果没有密码锁定,密码将打开屏幕并解锁设备。有了密码,它会打开屏幕并请求密码。

    【讨论】:

    • 我正在处理另一项任务。我会尽快尝试并通知您。
    • 说,这可以从工具的角度使用而不是调整吗?
    • 不行,只能在 SpringBoard 调整中使用。
    • 嗯。我想我做了一个调整,在 SpringBoard 上设置了一个调用上述方法的消息端口。命令行工具只会向该端口发送一条消息...
    • 您可以为此使用 Darwin 通知。每个应用程序都可以发送这些,即使在沙箱内也是如此。您不需要创建任何端口或任何东西。 CFNotificationCenterGetDarwinNotifyCenterCFNotificationCenterPostNotificationCFNotificationCenterAddObserver 函数是您需要的一切。
    【解决方案2】:

    我使用 Cydia 的 Activator 通过 SSH 唤醒和解锁设备。它适用于 IOS 10.1。

    activator send libactivator.system.homebutton
    activator send libactivator.system.homebutton
    

    锁定命令在这里:

    activator send libactivator.system.sleepbutton
    

    祝你好运玩得开心:)

    【讨论】:

      【解决方案3】:

      我的解决方案分为两部分,但可能会更好:

      1. 通过使用此代码模拟电源按钮按下来打开屏幕:

        VNCSendHIDEvent(IOHIDEventCreateKeyboardEvent(kCFAllocatorDefault, mach_absolute_time(),
        kHIDPage_Consumer, kHIDUsage_Csmr_Power, 1, 0)); // Power button down
        VNCSendHIDEvent(IOHIDEventCreateKeyboardEvent(kCFAllocatorDefault, mach_absolute_time(),
        kHIDPage_Consumer, kHIDUsage_Csmr_Power, 0, 0)); // Power button up
        
      2. 1 后屏幕会亮起,然后你可以使用SimulateTouch 的触控工具从命令行模拟滑动。

      对于上述 1,您的代码需要具有 com.apple.private.hid.client.event-dispatch entitlement

      更多信息,您还可以研究Activator 如何执行解锁屏幕侦听器。

      【讨论】:

      • 是否可以在锁定模式下在整个屏幕上绘制应用程序的 UI 并大大延迟省电模式?
      • @avesus 我不确定可以做到。也许您可以在 SO 上将其作为一个单独的问题提出。
      【解决方案4】:

      也许不是直接的解决方案。 您可以使用此调整和库https://github.com/iolate/SimulateTouch 来模拟用户在锁屏上滑动以解锁设备。

      【讨论】:

      • 感谢您的回答,但这不再适用于 iOS 7。底层 API GSEvent 不再适用于 iOS 7。我编辑了我的问题以澄清 iOS 7。
      • @radj 该项目的自述文件说它支持 iOS 7。
      • @radj 这个调整不使用 GSEvent,它在我运行 iOS7 的 iPhone4 上运行良好。
      • 得再检查一次。等等。
      • 我从 cydia 安装了调整和库,并从我的调整中调用 [SimulateTouchsimulateSwipeFromPoint:fromPoint toPoint:toPoint duration:duration]。不要忘记将libsimulatetouch.dylib(你可以自己编译)复制到theos的lib dir并在Makefile中添加XXX-LDFLAGS = -lsimulatetouch。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 2012-12-13
      • 2011-02-28
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多