3

早些时候我使用弹簧板框架来获取最前面的应用程序,它在 ios7 之前工作正常,但在 iOS8 中。我没有得到最前面的应用程序名称。我正在使用此代码。

#define SBSERVPATH "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices"
#define UIKITPATH "/System/Library/Framework/UIKit.framework/UIKit"
 //To get port
    mach_port_t *p;
    void *uikit = dlopen(UIKITPATH, RTLD_LAZY);
    int (*SBSSpringBoardServerPort)() =
    dlsym(uikit, "SBSSpringBoardServerPort");
    p = (mach_port_t *)SBSSpringBoardServerPort();
    dlclose(uikit);

void *sbserv = dlopen(SBSERVPATH, RTLD_LAZY);

void* (*SBFrontmostApplicationDisplayIdentifier)(mach_port_t* port,char * result) =
    dlsym(sbserv, "SBFrontmostApplicationDisplayIdentifier");
    //Get frontmost application
    char frontmostAppS[256];
    memset(frontmostAppS,sizeof(frontmostAppS),0);
    SBFrontmostApplicationDisplayIdentifier(p,frontmostAppS);
    NSString * frontmostApp=[NSString stringWithFormat:@"%s",frontmostAppS];

任何人都可以帮我解决它。或者任何我有错误的地方,可以请添加一个灯。提前致谢。

4

2 回答 2

3

你可能做不到。根据这篇文章,通过 SBFrontmostApplicationDisplayIdentifier 获取最前面的应用程序被认为是隐私泄露,并且在 iOS 8 中已被阻止。

于 2015-09-25T13:05:57.557 回答
0

如果您处于越狱环境并连接到 SpringBoard,您可以使用 SpringBoard_accessibilityFrontMostApplication获取对最前面的引用SBApplication

[[SpringBoard sharedApplication] _accessibilityFrontMostApplication]

如果返回nil,则用户在主屏幕上。

于 2016-04-28T19:44:26.993 回答