//
// ViewController.m
// TheBackground
//
// Created by 王木木 on 2018/4/27.
// Copyright ? 2018年 wangmumu. All rights reserved.
//
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()
/** */
@property (nonatomic,strong) AVAudioPlayer *audioPlayer;
@property (nonatomic, assign) UIBackgroundTaskIdentifier bgTask;
/** */
@property (nonatomic,strong) NSTimer *timer;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
#ifdef HAN
NSLog(@"1111");
#endif
NSError *error;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
if (error) {
NSLog(@"有錯(cuò)誤1");
}
NSError *activeError;
[[AVAudioSession sharedInstance] setActive:YES error:&activeError];
if (activeError) {
NSLog(@"有錯(cuò)誤2");
}
NSError *audioError;
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[self getUrl] error:&audioError];
[self.audioPlayer prepareToPlay];
[self.audioPlayer setNumberOfLoops:-1];
self.audioPlayer.volume = 1.0;
if (audioError) {
NSLog(@"播放器初始化失敗");
self.audioPlayer = nil;
}
[self creatPlayer];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(breakAudioSessionEvent:) name:AVAudioSessionInterruptionNotification object:nil];
self.bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:self.bgTask];
self.bgTask = UIBackgroundTaskInvalid;
}];
//開(kāi)啟定時(shí)器 不斷向系統(tǒng)請(qǐng)求后臺(tái)任務(wù)執(zhí)行的時(shí)間
self.timer = [NSTimer scheduledTimerWithTimeInterval:25.0 target:self selector:@selector(applyForMoreTime) userInfo:nil repeats:YES];
[self.timer fire];
}
- (void)applyForMoreTime {
//如果系統(tǒng)給的剩余時(shí)間小于60秒 就終止當(dāng)前的后臺(tái)任務(wù),再重新初始化一個(gè)后臺(tái)任務(wù),重新讓系統(tǒng)分配時(shí)間,這樣一直循環(huán)下去,保持APP在后臺(tái)一直處于active狀態(tài)。
if ([UIApplication sharedApplication].backgroundTimeRemaining < 60) {
[[UIApplication sharedApplication] endBackgroundTask:self.bgTask];
self.bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:self.bgTask];
self.bgTask = UIBackgroundTaskInvalid;
}];
}
}
- (void)breakAudioSessionEvent:(NSNotificationCenter *)sender {
NSLog(@"來(lái)電話了");
[self creatPlayer];
}
- (void)creatPlayer {
[self.audioPlayer play];
}
- (NSURL *)getUrl {
NSString *path = [[NSBundle mainBundle] pathForResource:@"群星-昨日重現(xiàn)" ofType:@"mp3"];
NSURL *pathUrl = [NSURL fileURLWithPath:path];
return pathUrl;
}
@end

image.png