音乐锁屏播放

1、首先要音乐支持后台播放

(1)在info.plist中添加

Required background modes

item 0 : App plays audio or streams audio/video using AirPlay

(2)设置AVAudioSession:

  AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setActive:YES error:nil];
    [session setCategory:AVAudioSessionCategoryPlayback error:nil];

(3)在后台注册事件:

  [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

2、锁屏设置

判断锁屏事件,进行事件处理

-(void)remoteControlReceivedWithEvent:(UIEvent *)event
{
    switch (event.subtype) {
        case UIEventSubtypeRemoteControlPause:
            [self.currentAudioPlayer pause];
            break;
        case UIEventSubtypeRemoteControlNextTrack:
            if (self.rotateCell) {
                [self.rotateCell stopRotate];

                NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
               SWTMusic *music = self.musicArray[indexPath.item];
                [SWTMusicTool stopMusic:music.filename];
                int index = indexPath.item + 1;
                if (index >= self.musicArray.count) {
                    index = 0;
                }
                NSIndexPath *newIndexPath = [NSIndexPath indexPathForItem:index inSection:0];
                [self.tableView selectRowAtIndexPath:newIndexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
                SWTMusicCell *cell = [self.tableView cellForRowAtIndexPath:newIndexPath];
                self.rotateCell = cell;
                [cell startRotate];
                SWTMusic *nextMusic = self.musicArray[index];
                [self showInfoInLockedScreen:nextMusic];
                self.currentAudioPlayer = [SWTMusicTool playMusic:nextMusic.filename];
                self.currentAudioPlayer.delegate = self;

            }

            break;
        case UIEventSubtypeRemoteControlPreviousTrack:
            if (self.rotateCell) {
                [self.rotateCell stopRotate];

                NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
                int index = indexPath.item - 1;
                if (index < 0) {
                    index = self.musicArray.count-1;
                }
                NSIndexPath *newIndexPath = [NSIndexPath indexPathForItem:index inSection:0];
                SWTMusic *music = self.musicArray[indexPath.item];
                [SWTMusicTool stopMusic:music.filename];

                [self.tableView selectRowAtIndexPath:newIndexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
                SWTMusicCell *cell = [self.tableView cellForRowAtIndexPath:newIndexPath];
                self.rotateCell = cell;
                [cell startRotate];
                SWTMusic *nextMusic = self.musicArray[index];
                [self showInfoInLockedScreen:nextMusic];
                self.currentAudioPlayer = [SWTMusicTool playMusic:nextMusic.filename];
                self.currentAudioPlayer.delegate = self;

            }

            break;
        case UIEventSubtypeRemoteControlPlay:
           [self.currentAudioPlayer play];
            break;
        default:
            break;
    }
}

4、锁屏信息

-(void)showInfoInLockedScreen:(SWTMusic*)music
{
//  这种方式,不能将信息正确显示在锁屏上
//    NSMutableDictionary *info = [NSMutableDictionary dictionary];
//    info[MPMediaItemPropertyTitle] = music.name;
//    info[MPMediaItemPropertyArtist] = music.singer;
//    info[MPMediaItemPropertyArtwork] = [[MPMediaItemArtwork alloc] initWithImage:[UIImage imageNamed:music.icon]];
//
//    [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:info];

    NSMutableDictionary *songInfo = [ [NSMutableDictionary alloc] init];

    MPMediaItemArtwork *albumArt = [ [MPMediaItemArtwork alloc] initWithImage: [UIImage imageNamed:music.icon]];
    //设置播放进度条
    double currentTime = self.currentAudioPlayer.currentTime;
    double duration = self.currentAudioPlayer.duration ;

    [ songInfo setObject:music.name forKey:MPMediaItemPropertyTitle ];
    [ songInfo setObject:music.singer forKey:MPMediaItemPropertyArtist ];
    [ songInfo setObject:music.singer forKey:MPMediaItemPropertyAlbumTitle ];
    [ songInfo setObject:albumArt forKey:MPMediaItemPropertyArtwork ];

[songInfo setObject:@(currentTime) forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime];
    [songInfo setObject:@(duration) forKey:MPMediaItemPropertyPlaybackDuration];
    [ [MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo ];

}
时间: 2024-11-03 12:02:37

音乐锁屏播放的相关文章

swift锁屏播放,音乐进度更新,专辑,歌手名显示

我自己用的音乐播放器是自带的AVPlayer 导入头文件#import <MediaPlayer/MediaPlayer.h> 远程控制事件接收与处理- (void)viewWillAppear:(BOOL)animated{[super viewWillAppear:animated];[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];[self becomeFirstResponder];}-(voi

QQ音乐/酷狗音乐锁屏控制实现原理

我实现的效果 混乱的锁屏控制 Android自4.0版本, 也就是API level 14开始, 加入了锁屏控制的功能, 相关的类是RemoteControlClient, 这个类在API level 21中被标记为deprecated, 被新的类MediaSession所替代. 我们的音乐App中最开始使用的是原生锁屏控制API, 说实话这个API不好用, 遇到了一些小坑, 最要命的是不同品牌的手机, 锁屏界面长的还不一样, 就连我自己都没见过原生4.0的锁屏控制界面是什么样的. 国内的手机厂

网易云音乐锁屏界面效果实现

最终效果: 完整的实现思路: App如果需要在锁屏界面上显示相关的信息和按钮, 必须先开启远程控制事件(Remote Control Event), 否则锁屏界面只显示滑动解锁. 实现锁屏界面信息, 将歌曲的相关信息更新到锁屏界面上 实现锁屏界面的事件处理, 在锁屏界面和上拉的快速功能菜单中实现播放控制 远程控制事件的实现 在iOS7.1之前, 远程控制事件主要涉及以下三个方法: 开始接收远程控制事件 结束接收远程控制事件 触发远程控制事件后的捕获处理 官方文档对这三个方法的描述如下, 这里做了

【腾讯Bugly干货分享】浅谈Android自定义锁屏页的发车姿势

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57875330c9da73584b025873 一.为什么需要自定义锁屏页 锁屏作为一种黑白屏时代就存在的手机功能,至今仍发挥着巨大作用,特别是触屏时代的到来,锁屏的功用被发挥到了极致.多少人曾经在无聊的时候每隔几分钟划开锁屏再关上,孜孜不倦,其酸爽程度不亚于捏气泡膜.确实,一款漂亮的锁屏能为手机增色不少,但锁屏存在的核心目的主要是三个:保护自己手机的隐私,防止误操作,在不关闭

浅谈 Android 自定义锁屏页的发车姿势

作者:blowUp,原文链接:http://mp.weixin.qq.com/s?__biz=MzA3NTYzODYzMg==&mid=2653577446&idx=2&sn=940cfe45f8da91277d1046d90368d440&scene=4#wechat_redirect 锁屏作为一种黑白屏时代就存在的手机功能,至今仍发挥着巨大作用,特别是触屏时代的到来,锁屏的功用被发挥到了极致.多少人曾经在无聊的时候每隔几分钟划开锁屏再关上,孜孜不倦,其酸爽程度不亚于捏气

html5 audio手机播放,锁屏或程序后台运行音乐不播放

今天做一个手机播放页面,发现在ios上只要锁屏或切换其他程序音乐就关闭,找了好久才发现原因. 因为页面之播放一个文件所以我这样写的 <audio id="audio" autoplay="true" controls="" preload="preload"> </audio> 再通过js设置mp3地址 audio.setAttribute("src","http://xx

轻仿QQ音乐之音频歌词播放、锁屏歌词-b

先上效果图 歌词播放界面 音乐播放界面 锁屏歌词界面 一. 项目概述 前面内容实在是太基础..只想看知识点的同学可以直接跳到第三部分的干货 项目播放的mp3文件及lrc文件均来自QQ音乐 本文主要主要讲解锁屏歌词的实现,音频.歌词的播放网上资源略多,因此不做重点讲解,项目也是采取最简单的MVC+storyboard方式 项目GitHub地址: https://github.com/PengfeiWang666/WPFMusicPlayer 音乐模型-->WPFMusic /** 图片 */ @p

AVPlayer 音乐播放后台播放,以及锁屏主题设置

第一步:在appDelegate中通知app支持后台播放:在方法 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {} 中添加如下代码: AVAudioSession *audioSession = [AVAudioSession sharedInstance]; //默认情况下扬声器播放 [audioSession setCa

音乐类型APP:如何添加正播放的音乐进度,歌手名,图片等信息显示 到锁屏和控制中心

使用的是豆瓣的音频播放类 导入头文件#import <MediaPlayer/MediaPlayer.h> #import <MediaPlayer/MPNowPlayingInfoCenter.h> #import <MediaPlayer/MPMediaItem.h> 远程控制事件接收与处理- (void)viewWillAppear:(BOOL)animated{[super viewWillAppear:animated];[[UIApplication sha