如何获得FrontMost App是iOS8

时间:2014-09-19 17:46:57

标签: ios ios7 ios8 xcode6 springboard

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

#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];

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

2 个答案:

答案 0 :(得分:3)

你可能不能。根据{{​​3}},通过SBFrontmostApplicationDisplayIdentifier获取最前面的应用程序被视为隐私泄露,并已在iOS 8中被阻止。

答案 1 :(得分:0)

如果您正在使用越狱环境并挂接到SpringBoard,则可以使用SpringBoard的_accessibilityFrontMostApplication来获取对最前面SBApplication的引用:

[[SpringBoard sharedApplication] _accessibilityFrontMostApplication]

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