一骏全、事件背景
iOS13版本后臺殺進程厲害,影響用戶體驗尼斧,公司就要求看有沒什么方案能解決姜贡。
二、方案
需要讓APP后臺一直在惫卓茫活楼咳。保活的方案有兩種烛恤。
方案1母怜、在后臺一直播放一段無聲音頻,
方案2缚柏、在后臺實時定位苹熏。
三、決策
考慮到后臺實時定位的方案船惨,只有在用戶開啟的APP的定位權(quán)限才行柜裸。所以否決了方案2,采納方案1粱锐。
四疙挺、實施
- 在application: didFinishLaunchingWithOptions:方法中做如下處理
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 防止影響其他APP音頻
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient withOptions:AVAudioSessionCategoryOptionMixWithOthers|AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
}
- 在applicationDidEnterBackground:方法中處理如下:
- (void)applicationDidEnterBackground:(UIApplication *)application {
if (!_audioPlayer) {
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];
[session setCategory:AVAudioSessionCategoryAmbient error:nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
NSString *musicPath=[[NSBundle mainBundle] pathForResource:@"notVoice" ofType:@"mp3"];
NSURL *url=[[NSURL alloc]initFileURLWithPath:musicPath];
_audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
}
[_audioPlayer prepareToPlay];
_audioPlayer.numberOfLoops = -1;
[_audioPlayer play];
}
- 在applicationWillEnterForeground方法中暫定音頻播放
- (void)applicationWillEnterForeground:(UIApplication *)application {
[_audioPlayer stop];
}
五、建議
了解AVAudioSessionCategory各個值的含義