一般来说当用户点击home键之后 app 会被挂起不会在后台运行 今天遇到一个音乐播放器 需要在后台倒计时播放时间 但是需要NSTimer 再后台也要运行
我的思路是 借助 ios 的后台音乐播放
不多说了 上代码
首先在pilst 文件里添加 Required background modes 字段 添加一项 为 App plays audio or streams audio/video using AirPlay
代码中再appdelegate 添加如下代码
#import "AppDelegate.h"
#import "HomeViewController.h"
#import <AVFoundation/AVFoundation.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
//后台执行
NSError *err = nil;
[[AVAudioSession sharedInstance]setCategory: AVAudioSessionCategoryPlayback error: &err];
[[AVAudioSession sharedInstance]setActive: YES error: &err];
return YES;
}
- (void)applicationDidEnterBackground:(UIApplication *)application{
//设置 后台运行 任务
UIApplication* app = [UIApplication sharedApplication];
__block UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid)
{
bgTask = UIBackgroundTaskInvalid;
}
});
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid)
{
bgTask = UIBackgroundTaskInvalid;
}
});
});
}
@end
这里设置完成之后 nstimer 就能后台运行了