通过蓝牙设备实现控制iOS系统音乐播放器

一、开启后台音乐播放模式

1.Background Modes

打开后台模式的音乐播放,或者在info.plist文件中添加Required Background Modes键,其值是App plays audio or streams audio/video using AirPlay

Background Modes.jpg

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音频播放的几种方式

推荐阅读更多精彩内容