如何以编程方式解锁iOS屏幕?

9

我目前正在探索创建越狱插件。我想解锁手机屏幕。这个要怎么做呢?在iOS 7上可以使用哪些私有API来实现此功能?

5个回答

9

如果我们在谈论越狱,那么你可以编写一个SpringBoard插件来实现这个功能(仅适用于iOS 7)。

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

如果没有密码锁定,手机按键会自动开启屏幕并解锁设备。而有了密码锁定,手机按键开启屏幕后还需要输入密码才能解锁。


1
我正在进行另一个任务。我会尽快尝试并告诉你。 - radj
这个能从工具的角度使用,而不是调整吗? - radj
不,它只能在SpringBoard插件中使用。 - creker
嗯,我想我可以进行一些调整,在SpringBoard上设置一个消息端口来调用上述方法。而命令行工具只需向该端口发送一条消息即可... - radj
2
你可以使用达尔文通知来实现。每个应用程序都可以发送它们,甚至在沙盒内也可以。你不需要创建任何端口或其他东西。CFNotificationCenterGetDarwinNotifyCenterCFNotificationCenterPostNotificationCFNotificationCenterAddObserver 函数是你所需要的全部。 - creker
@creker,使用外部的大型框架(如QT),编写类似的iOS应用程序是可能的吗?-我是iOS开发的新手。 - Mazeryt

4

我使用Cydia中的Activator通过SSH唤醒和解锁设备。在IOS 10.1上可行。

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

锁定命令在这里:

activator send libactivator.system.sleepbutton

祝你好运,玩得开心 :)


3

我的解决方案分为两部分,但是还有改进的空间:

  1. Power on screen by simulating a power button press with this code:

    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. After 1, the screen will light up and then you can use SimulateTouch's stouch tool to simulate a swipe from the command line.

对于上面的问题,你的代码需要有com.apple.private.hid.client.event-dispatch 许可证

更多信息,你还可以研究一下Activator如何执行解锁屏幕监听器。


在锁定模式下,是否有可能在整个屏幕上绘制应用程序的用户界面,并大幅延迟省电模式? - Brian Cannard
1
@avesus 我不确定能否做到。也许你可以在这里向 SO 提出一个单独的问题。 - radj

2

谢谢您的回答,但这在 iOS 7 上不再起作用了。 底层 API GSEvent 在 iOS 7 上不再起作用。 我编辑了我的问题,以澄清在 iOS 7 中的情况。 - radj
@radj,该项目的README文件中写明它支持iOS 7。 - Nicu Stiurca
@radj 这个调整不使用 GSEvent,在我运行 iOS7 的 iPhone4 上能够正常工作。 - cloudycliff
得再检查一遍。等等。 - radj
2
我从Cydia安装了tweak和library,并在我的tweak中调用[SimulateTouch simulateSwipeFromPoint:fromPoint toPoint:toPoint duration:duration]。别忘了将libsimulatetouch.dylib(你可以自己编译)复制到theos的lib目录中,并在Makefile中添加XXX-LDFLAGS = -lsimulatetouch。 - cloudycliff
显示剩余4条评论

1
SpringBoard进程的上下文中调用此代码。 对于某些情况,您可以使用tweak。
注意:确保您从主线程调用它
[[NSClassFromString(@"SBBacklightController") sharedInstance] turnOnScreenFullyWithBacklightSource:0];
[[NSClassFromString(@"SBLockScreenManager") sharedInstance] unlockUIFromSource:0xD withOptions:nil];

没有密码锁,代码会打开屏幕并解锁设备。 有密码锁,它会打开屏幕并要求输入密码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接