前言
RemoteControl,这里就翻译为远程控制吧。
远程控制是为用户提供操作App多媒体的。远程控制事件源于外部附件或由系统显示的传输控制,并通过媒体播放器框架的类传送到应用程序。播放音频或视频内容的应用程序使用这些事件来开始和停止播放,更改曲目,甚至速度的项目。所有的媒体应用程序应该支持这些事件。
除了支持远程控制事件,应用程序可以使用媒体播放器框架,以提供播放信息的曲目。该系统在适当的地方显示播放信息,如锁屏和控制中心。有关媒体播放器框架类的更多信息,见媒体播放器框架参考Media Player Framework Reference.
Remote Control功能
RemoteControl可以用来在不打开app的情况下控制app中的多媒体播放,主要包括:
- 锁屏界面双击Home键后出现的播放操作区域
- iOS7之后控制中心的播放操作区域
- iOS7之前双击home键后出现的进程中向左滑动出现的播放操作区域
- AppleTV,AirPlay中显示的播放操作区域
- 耳机线控
- 车载系统的设置
让App支持Remote Control
要接收远程控制事件,需要做到以下的几点:
- 接收者必须可以成为第一响应者;
- 接收者必须显示声明接收RemoteControl事件;
- App必须是Now Playing App.
若应用程序还提供了正在播放的信息,使用MPNowPlayingInfoCenter
对象在适当的时候更新信息。
效果图
类似网易云音乐锁屏状态下的Now Playing显示信息:
环境准备
要使App支持Remote Control,需要设置一下info.plist文件,添加required background modes,并添加一个值为:
App plays audio or streams audio/video using AirPlay
接下来,播放音频之前先要设置AVAudioSession模式:
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord
withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker
error:nil];
扩展UIApplication作为第一响应者
在iOS上,响应者链如上图,由图可知,若其它视图没有处理,最终会传到UIApplication,因此使用UIApplication作为第一响应者是最合适的。
扩展头文件声明,我们在监听到对应的事件时,发送通知。
//
// UIApplication+RemoteControl.h
// IOSAudioRemoteControl
//
// Created by huangyibiao on 15/3/25.
// Copyright (c) 2015年 huangyibiao. All rights reserved.
//
#import <UIKit/UIKit.h>
// 播放
extern NSString *kRemoteControlPlayTapped;
// 暂停
extern NSStrin