iOS 长后台,亲测

       研究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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值