iOS循环播放背景音乐
相关宏定义
#define kUserDefaults [NSUserDefaults standardUserDefaults]
#define kAppDelegate ((AppDelegate*)[[UIApplication sharedApplication] delegate])
static NSString *const _Nullable kSoundValid = @"kSoundValid";
设置播放器,我的audioPlayer
是写在AppDelegate
里面的,进入应用后,直接调播放就行了
- (void)setBackgroundMusic{
NSString *path = [[NSBundle mainBundle] pathForResource:@"Music" ofType:@"mp3"];
NSURL *url = [[NSURL alloc] initFileURLWithPath:path];
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
self.audioPlayer.volume = 0.5;
self.audioPlayer.delegate = self;
}
// 播放器代理 播放完成的时候再次播放
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
[self.audioPlayer play];
}
播放与停止
/** 播放背景音乐*/
+ (void)playMusic{
if ([kUserDefaults boolForKey:kMusicValid]) {
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryAmbient error:nil];
[session setActive:YES error:nil];
[kAppDelegate.audioPlayer play];
}
}
/** 停止背景音乐*/
+ (void)stopMusic{
[kAppDelegate.audioPlayer pause];
// 继续播放其他App的声音
[[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];
}
关于设置
其中LGSwitch
是自定义开关LGService
为自定义的工具类
- (void)musicDidChange:(LGSwitch *)switchView{
[kUserDefaults setBool:switchView.isOn forKey:kMusicValid];
[kUserDefaults synchronize];
if (switchView.isOn) {
[LGService playMusic];
}else{
[LGService stopMusic];
}
}