2

我正在做一个锁屏调整。在我的自定义锁屏视图中,有一个按钮,您可以使用它来锁定和打开本机手机应用程序。我使用的 IDE 是 iOSOpenDev。

我试过这些方法:

  1. 网址方案:我不想要表盘显示,所以放弃了。

  2. SBSLaunchApplicationWithIdentifier。这是最流行的方法,像这样:

void* sbServices = dlopen("/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices", RTLD_LAZY);
int (*SBSLaunchApplicationWithIdentifier)(CFStringRef identifier, Boolean suspended) =
   dlsym(sbServices, "SBSLaunchApplicationWithIdentifier");
int result = SBSLaunchApplicationWithIdentifier((CFStringRef)bundleId, false);
dlclose(sbServices);

但在 .xm 文件中,编译器告诉我

无法使用“void *”类型的右值初始化“int (*)(CFStringRef, Boolean)”类型的变量。

我怎样才能做到这一点?谢谢!

4

1 回答 1

2

我不确定您使用的哪个编译器会出现此错误…… Apple LLVM 编译器(4.2 或 5.0)可以毫无问题地接受您显示的代码。

但是,我认为,您应该能够通过将返回值dlsym()转换为 a来修复该编译错误(int (*)(CFStringRef, Boolean))

int (*SBSLaunchApplicationWithIdentifier)(CFStringRef identifier, Boolean suspended) =
   (int (*)(CFStringRef, Boolean))dlsym(sbServices, "SBSLaunchApplicationWithIdentifier");
于 2013-10-28T08:46:58.630 回答