我该如何以编程的方式锁定和解锁iPhone主屏幕(即设备本身)?
不可能。不过当你的应用程序在运行时,你可以“防止”你的手机锁屏。[UIApplication sharedApplication].idleTimerDisabled = YES
可以实现此功能。
你可以通过在你的应用程序中调用GSEventLockDevice();来实现。这个函数可以在GraphicsServices.framework中找到。
iOS7
上它不能工作。你能告诉我有关 iOS7
的情况吗?我已经为此提出了一个问题(https://dev59.com/cnfZa4cB1Zd3GeqPUag5)。 - BhavinGSEventLockDevice
只能锁定设备。如何解锁?只有使用私有 eAPI 才可能吗? - Maxim Shoustin这个问题已经得到解决。你可以在Github上找到相关内容:https://github.com/neuroo/LockMeNow(适用于IOS 7以下版本)。
char*framework="/System/Library/PrivateFrameworks/GraphicsServices.framework/GraphicsServices";
void *handle= dlopen(framework, RTLD_NOW);
if (handle)
{
void (*GSEventLockDevice)() = dlsym(handle, "GSEventLockDevice");
if (GSEventLockDevice)
{
GSEventLockDevice();
NSLog(@"Phone is Locked");
//.........
}
dlclose(handle);
}
可能可以使用未经记录的苹果功能(也许是GSEventLockDevice()?),但这肯定会导致应用商店自动拒绝。
苹果公司根本不希望任何人去玩弄这样的核心功能。
GraphicsServices.framework
。
注意:
此GraphicsServices.framework
是一个私有框架。苹果将永远不会接受您的应用程序。通过调用GSEventLockDevice()
方法,您可以轻松锁定或解锁设备。此GSEventLockDevice()
位于GSEvent.h
中。
我希望这可以帮助您。
如果您仍然遇到任何问题,请告诉我。
现在有一个解决方法,如果你真的需要锁定手机,但我没有解锁它的方法...
使用iOS 16.4,你现在可以在快捷方式中使用"锁屏"操作。
因此,要以编程方式锁定设备,您可以要求您的应用程序启动一个将完成工作的快捷方式。
您可以使用一行代码导入所需的"锁屏"快捷方式:
openURL(URL(string: "https://www.icloud.com/shortcuts/da76168e73974887ae96480d435da049")!)
当用户导入所需的快捷方式后,您可以直接调用它:
func runLockscreenShortcut2() {
if let url = URL(string: "shortcuts://run-shortcut?name=Lockscreen"), UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
唯一的缺点是,在设备锁定之前,快捷方式应用程序会短暂地出现,并且在解锁时会处于前台。
您可以在“锁定屏幕”操作之前为您的快捷方式添加一个“转到主屏幕”操作,这样当设备解锁时,快捷方式应用程序就不会处于前台,但这会减慢锁定过程。
远非完美,但目前是您的唯一选择...
基本上不可能,因为这可能是苹果专有的私有框架的一部分。有一些应用程序,例如虚假呼叫应用程序,利用“虚假”锁屏,但正如您所指出的那样,按下主页按钮会退出应用程序,使您的锁屏无效。
我不相信有一种方法可以实现这个目标。
但我相信有一种可能的方法是防止iPhone锁屏。然后,您可以构建一个视图来复制锁定解锁功能,并仍然控制手机。