iOS 长后台,亲测

来源:互联网 发布:写作软件 知乎 编辑:程序博客网 时间:2024/05/18 09:14

       研究iOS长后台,卡壳太久了,记得是去年给某药业做一个移动外勤app,需要iOS保持后台在线。尝试了网上给出的各种方法,有的只能在插上电源的时候一直跑,但是掉了电,过不了几分钟就背杀掉了。

       这里也不用iOS7的一些方法,在进入后台的时候直接申请一个后台任务。同时开启一个定时器去检测(作者给出的检测时间是1min),检测到后台任务的时间比较小的时候,转载的文章给出的值是61s。当小于这个值的时候,这个时候来播放一段无声的音乐文件。播放的同时,再来申请后台的任务,这样就不会被苹果干掉了。

但是有一个缺点,如果你的应用没有播放音乐的功能,只是为了长后台而加上,有可能是无法上架的。但是对于企业应用来说这已经足够你使用了。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{            NSError *error = nil;    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error];        [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(tik) userInfo:nil repeats:YES];    // Override point for customization after application launch.    return YES;}


- (void)tik{        if ([[UIApplication sharedApplication] backgroundTimeRemaining] < 61.0)    {        [self longTimeTask];        [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];    }    }

- (void)longTimeTask{    NSString *musicFilePath = [[NSBundle mainBundle] pathForResource:@"SlientAudio" ofType:@"wav"]; //创建音乐文件路径    NSURL *musicURL = [[NSURL alloc] initFileURLWithPath:musicFilePath];       if (_myBackMusic == nil)    {        AVAudioPlayer *thePlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:musicURL error:nil];        //创建播放器        self.myBackMusic = thePlayer; //赋值给自己定义的类变量    }    [self.myBackMusic prepareToPlay];   //[self.myBackMusic setVolume:1]; //设置音量大小   // thePlayer.numberOfLoops = -1;//设置音乐播放次数 -1为一直循环    [self.myBackMusic play]; //播放}

http://my.oschina.net/u/1386081/blog/277380

无声文件

http://pan.baidu.com/s/1pJM9gSj




0 0