objective-c – 接收无音频的遥控事件
这是一些背景信息,否则以粗体方式跳过问题.我正在构建一个应用程序,我希望它可以访问遥控器/锁屏幕事件.棘手的部分是这个应用程序不会播放音频,它控制附近的另一个设备的音频.当应用程序在前台时,设备之间的通信不是问题.正如我刚刚发现的,应用程序在播放音频与播放音频会话之前不会控制遥控器,而是最后一个.这是一个问题,因为像我说的,应用程序控制其他设备的音频,不需要自己玩.
我的第一个倾向是每次打开应用程序时都会播放一个静音剪辑,以便控制遥控器.我必须这样做的事实让我想知道,如果我甚至被苹果允许这样做,或者如果有另一种方式来实现这一点,而不用假的音频剪辑欺骗系统. 问题:苹果是否会批准播放静音音频剪辑的应用程序,以便控制远程/锁定屏幕控件,以控制其他设备的音频?在没有音频会话的情况下是否有任何方式来控制遥控器? 附:我更喜欢在iOS 4.0及更高版本上使用此功能. 我看到了this similar question,它已经让我头脑风暴,但提供的答案并不是我需要知道的具体内容. 解决方法
注意:从iOS 7.1开始,您应该使用
MPRemoteCommandCenter而不是下面的答案.
您创建的MPRemoteCommand多种系统提供的子类,并将其分配到[MPRemoteCommandCenter sharedCommandCenter]的性质. 我保持这个周围人的休息历史参考,但下面不保证最近的iOS版本.事实上,它可能不会. 您绝对需要音频播放器,但不一定是显式会话来控制遥控器事件. (AVAudioSession对任何播放音频的应用程序都是隐含的).我花了大量的时间玩这个来确认这一点. 我在互联网上看到了很多关于在哪里设置removeControlEventRecievedWithEvent:方法和响应者链的各种方法的混乱.我知道这种方法适用于iOS 6和iOS 7.其他方法没有.不要浪费时间处理应用程序委托(他们曾经工作的地方)中的远程控制事件,或者在应用程序的生命周期内可能会消失的视图控制器. 我做了a demo project来展示如何做到这一点. 这是一个很快就会发生什么: >您需要创建一个UIApplication的子类.当文档说UIResponder时,这意味着UIApplication,因为你的应用程序类是UIResponder的子类.在这个子类中,你将要实现remoteControlReceivedWithEvent:和canBecomeFirstResponder方法.你想从canBecomeFirstResponder返回YES.在遥控方法中,您可能希望通知您的音频播放器有所改变. return UIApplicationMain(argc,argv,nil,NSStringFromClass([RCAppDel`egate class])); 看起来像这样: return UIApplicationMain(argc,NSStringFromClass([RCApplication class]),NSStringFromClass([RCAppDelegate class])); 在我的情况下,RCApplication是我的自定义类的名称.使用您的子类的名称.不要忘记#import输入相应的标题. 这个例子有一些更多的代码来注销远程事件,但并不是那么复杂.我只是定义并传递一些字符串常量. 我敢打赌,一个无声循环的MP3文件将有助于实现您的目标. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |