最近的项目中,当app进入后台时,需要执行一些操作。根据需求,还需要判断,是哪种操作导致app进入后台的:按home键;按锁屏键;在app中跳转到别的app。目前遇到的情况,就这三种。
进入正题,找到AppDelegate.m 文件,然后:
1、在方法 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中,添加如下代码:
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),
NULL,
displayStatusChanged,
CFSTR("com.apple.springboard.lockcomplete"),
NULL,
CFNotificationSuspensionBehaviorDeliverImmediately);
staticvoid displayStatusChanged(CFNotificationCenterRef center,
void *observer,
CFStringRef name,
const void *object,
CFDictionaryRef userInfo) {
if (name ==CFSTR("com.apple.springboard.lockcomplete")) {
[[NSUserDefaultsstandardUserDefaults] setBool:YESforKey:@"kDisplayStatusLocked"];
[[NSUserDefaultsstandardUserDefaults] synchronize];
}
}
UIApplicationState state = [[UIApplicationsharedApplication] applicationState];
if (state ==UIApplicationStateInactive) {
NSLog(@"按了锁屏键");
}
else if (state == UIApplicationStateBackground) {
if (![[NSUserDefaultsstandardUserDefaults] boolForKey:@"kDisplayStatusLocked"]) {
NSLog(@"按了home键,或者跳转到另一个app");
}
else {
NSLog(@"按了锁屏键");
}
}
[[NSUserDefaultsstandardUserDefaults] synchronize];