iOS开发 NSTimer 后台运行

来源:互联网 发布:傲剑舍利子升级数据 编辑:程序博客网 时间:2024/06/06 05:09

一般来说当用户点击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 就能后台运行了 

0 0