关闭

iOS实现长时间后台运行

216人阅读 评论(0) 收藏 举报
分类:

前段时间做一个闹钟类型的产品,使用localnotification不太符合要求。

对于ios7,苹果支持几种后台运行模式,backgroundTask,voip,后台播放音乐等,具体看官方文档就好。

我这边需要在后台跑一个长时间运行的计时器,所以就不能让app进入suspend状态。

很早以前听说可以通过后台播放音乐来实现,借鉴了一下,测试好几天,找出来了一个还比较靠谱的方案:

首先在

- (void)applicationDidEnterBackground:(UIApplication *)application{

}

里面申请backgroundTask

[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]

实现一个可以运行几分钟的权限。

然后写一个计时器实时检测 backgroundTimeRemaining

- (void)tik{

    if ([[UIApplication sharedApplication] backgroundTimeRemaining] < 61.0) {

       [[CKAudioTool sharedInstance] playSound];

        [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];

    }

}

 [[CKAudioTool sharedInstance] playSound];这段代码是去播放了一个无声的音乐,很关键的一点是

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error]

这样后台播放就不会影响到别的程序播放音乐了。

我这个计时器每分钟运行一次tik函数,如果发现后台运行时间小于一分钟了,就再去申请一个backgroundTask。

神奇的地方在于:backgroundTask不能在程序已经进入后台的时候申请,可以用一个播放音乐的假前台状态去申请,所以可以做到不断申请到权限,也就完成了长时间后台执行。

应用实例大家可以去看一款app “同学闹钟”。去app store就可以下到。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:37374次
    • 积分:722
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:100篇
    • 译文:6篇
    • 评论:0条
    文章分类