美文网首页 ios零碎记录将来跳槽用
通过蓝牙设备实现控制iOS系统音乐播放器

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

作者: little阿飞 | 来源:发表于2016-02-22 13:40 被阅读3248次

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

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

    相关文章

      网友评论

        本文标题:通过蓝牙设备实现控制iOS系统音乐播放器

        本文链接:https://www.haomeiwen.com/subject/nxrbkttx.html