一、开启后台音乐播放模式
1.Background Modes
打开后台模式的音乐播放,或者在info.plist文件中添加Required Background Modes
键,其值是App plays audio or streams audio/video using AirPlay
2.添加后台播放代码
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
二、使用MPMusicPlayeerController
控制iOS音乐播放
1.导入头文件:#import <MediaPlayer/MediaPlayer.h>
2.初始化:
@property (strong, nonatomic) MPMusicPlayerController *musicPlayerController; //音乐播放器
@property (assign, nonatomic) MPMusicPlaybackState musicPlaybackState; //播放状态
@property (strong, nonatomic) MPMediaQuery *query; //媒体队列
self.musicPlayerController = [MPMusicPlayerController systemMusicPlayer];//初始化系统音乐播放器
- 使用
MPMusicPlayerController
实例化对象来播放内置音乐库的媒体文件,有以下两种类方法来实例化对象:MPMusicPlayerController *playController = [MPMusicPlayerController systemMusicPlayer];
- 说明:播放内置媒体库项目取代用户目前播放状态(如果是用网易云音乐或QQ音乐在播放歌曲)
MPMusicPlayerController *playController = [MPMusicPlayerController applicationMusicPlayer];
- 说明:播放该应用内的歌曲,不影响本机自带音乐播放器的状态。
3.监听到蓝牙设备发来的控制信息作出改变:
蓝牙设备通过通知的方式向APP发送消息,APP监听并接收到后,调用systemMusicPlayerControl:
方法实现对iOS系统音乐播放器的控制。
- (void)systemMusicPlayerControl:(NSNotification *)notification {
NSData *data = [notification.object objectForKey:@"musicControlData"]; //蓝牙设备传来的控制信息
Byte *bytes = (Byte *)[data bytes];
self.musicPlaybackState = self.musicPlayerController.playbackState;
if (bytes[1] == 0x01) { //验证
if (![self isPlayingItem]) {
[self createMediaQuery]; //若没有正在播放的媒体项目,则创建媒体队列
}
if (bytes[2] == 0x01) { // 播放/停止
if (self.musicPlaybackState == MPMusicPlaybackStatePlaying) {
[self.musicPlayerController pause]; //暂停
}
if (self.musicPlaybackState == MPMusicPlaybackStateStopped || self.musicPlaybackState == MPMusicPlaybackStatePaused || self.musicPlaybackState == MPMusicPlaybackStateInterrupted) {
[self.musicPlayerController play]; //播放
}
} else if (bytes[2] == 0x02) { // 切换上一曲
[self.musicPlayerController skipToPreviousItem];
} else if (bytes[2] == 0x03) { // 切换下一曲
[self.musicPlayerController skipToNextItem];
} else {
NSLog(@"Music Control Error Data!");
}
}
}
// 判断有没有正在播放的媒体项目
- (BOOL)isPlayingItem {
if ([self.musicPlayerController indexOfNowPlayingItem] == NSNotFound) {
return NO;
} else {
return YES;
}
}
//创建媒体队列
- (void)createMediaQuery {
self.query = [MPMediaQuery songsQuery];
[self.musicPlayerController setQueueWithQuery:self.query];
}
到此就实现了蓝牙设备控制iOS系统音乐播放器播放音乐的功能。
参考文章:https://www.zybuluo.com/kezhen/note/136614 iOS音频播放的几种方式