iOS 4 Background Audio

最近半个月一直在忙公司iPhone App修改和上架的事。改改bug调调UI那是每天的例行小事。最头疼的是将现在的基于iOS 3的app升级成基于iOS 4的版本。对,没错,我们希望我们的app能够在iPhone 4上全面支持multitasking,而对于一个音乐类app来说,也就是我们的app能够在后台播放,并且能够全面接管iPod app的控制钮和图标。就像Spotify和Pandora一样。
然而这真的是一件很让人头疼的事情。苹果的iOS 4官方文档在background有点语焉不详。按照官方文档(http://bit.ly/cIZBEO)的说法:
  • 首先,你得使用最新版的Xcode
  • 接着,打开使用旧版Xcode创建的工程文件,修改***info.plist文件,其实也就是告诉Xcode,“我这app呀,它打算支持后台音乐播放”
官方文档到这就差不多没了。按照这样的修改方法,我们试了试,还真行。唉呆会,不对,怎么放完了一首歌就自动停住了?
恩哪。还真会停住。具体情况是:
  • 如果音频操作是用苹果官方的AVFoundation.framework实现的话,每播放完一首歌曲,app就会自动被iOS给suspend 掉。这有一个山寨的解决办法:另init一个AVAudioPlayer的实例,从app启动开始,就不断重复播放一个无声的音频片段。这个方法能够保证 歌曲切换的间隙里app仍然有音频输出。而只要不断有音频输出,iOS就不会把你的app给suspend掉。真的很山寨,但如果你使用的就是 AVFoundation这个framework的话,这招对付旧版Xcode的代码真的很管用。
  • 如果你使用的是著名的开源的AudioStreamer的旧版代码。恩,这个这个,上述偷偷放歌的方法就不是很管用了。app启动以后就会自己 crash掉。可是,万幸的是,AudioStreamer最近刚刚推出了更新版,已经可以很好的支持iOS 4的后台播放功能了,看这里:http://github.com/DigitalDJ/AudioStreamer。
恩到这里,后台不间断播放的问题就解决了。无论是播放本地音乐库(AVAudioPlayer or AudioStreamer),还是播放在线内容(AudioStreamer),我们都可以轻松的按下Home键然后边玩别的边听音乐了。然而这还不是 问题的全部,我们的app还没有顺利接管iOS 4快速切换菜单(Switching board)中的iPod导航钮。这个,下篇博文再说。

iOS 4 Background Audio 续

接上篇,同时勘一下上篇的误。
恩,先勘误:
  • Audiostreamer的更新版放弃了对iOS 3的支持。如果你将Audiostreamer搬进iOS 3的工程的话,会直接crash。沿着crash report找到崩溃的原因,恩, handlePropertyChangeForQueue 函数比之前的iOS 3版本多出了些iOS 4才有的东西。iOS 3到这里会挂掉。
  • 恩,不过我们可以修改一下这里的代码。执行 handlePropertyChangeForQueue 函数之前先做个判断。如果是老的iOS,我们就还是按老的代码来办。行,没问题,程序到这OK。不过还是有问题。Audiostreamer的网络链接部 分老是报错,无法从服务器端拿到数据。原因不明。
  • 接管iPod控制钮和实现后台播放,其实是一件事。这个,下面详细讲。
然后说说接管iPod控制钮的事。我们的最终花花肠子在此:
其实说简单很简单。可是苹果的文档啊,看的人头疼。
  • 首先,进 ***-info.plist 文件里,建立一个新的key,名叫 UIBackgroundModes ,在右侧 Value 栏,新增一个值, audio .
  • 然后找到工程里那个负责音频播放的类。
  • 依次重载这个类的 viewDidAppear 、 viewWillDisappear 、 canBecomeFirstResponder 、 remoteControlReceivedWithEvent 函数。这里贴一下 viewDidAppear 的代码:
假设你的网络链接模块正常的话,此刻,你的app应该已经完全接管iPod的控制钮了。

This was written by Di Wu. Posted on Friday, October 15, 2010, at 3:49 pm. Filed under 工作备忘. Tagged apple, AudioStreamer, 后台播放, 多任务, background audio, canBecomeFirstResponder, 苹果, handlePropertyChangeForQueue, iOS, iOS 3, iOS 4, iPhone, iPod, multitasking, remoteControlReceivedWithEvent, viewDidAppear, viewWillDisappear, Xcode. Bookmark the permalink. Follow comments here with the RSS feed. Post a comment or leave a trackback.

转载于:https://blog.51cto.com/mkhgg/689760

iOS 4 Background Audio相关推荐

  1. Unity之iOS报错Audio effect Resonance Audio Renderer could not be found.

    Unity之iOS报错Audio effect Resonance Audio Renderer could not be found. 报错 解决方法 链接 报错 如题,报错的详细信息如下: Aud ...

  2. ios设置音乐audio自动播放

    因为audio标签的自动播放:autoplay.在ios系统中不能自动播放,此时需要设置,在进入页面自动播放音乐. 第一步,先引入js微信 <script src="js/jweixi ...

  3. IOS上的 Audio Memos SE 如何分享和传输录音到电脑?

    Audio Memos SE 是 Audio Memos 的精简版 ,顾名思义就是少了很多实用功能.当初下载这个就是因为广告比较少一些,没有全屏幕的广告. 好了,录了音,想分享和传到电脑要怎么弄呢? ...

  4. 微信网页Audio自动播放(IOS安卓)

    尝试很多网上的方法无效,自己整理的可行方案 //之前一直是用dom元素(在ios下无效)<audio ref="audio" loop><source :src= ...

  5. Audio Unit: iOS中最底层最强大的音频控制API

    阅读的前提: Audio Session基础(Audio Session) Core Audio基本数据结构(Core Audio) 音视频基础知识 C/C++ 简单数据结构,函数使用 以下概念是文中 ...

  6. Audio Unit: iOS中最底层最强大音频控制API

    阅读前提: Audio Session基础(Audio Session) Core Audio基本数据结构(Core Audio) 音视频基础知识 C/C++ 简单数据结构,函数使用 以下概念是文中常 ...

  7. iOS-Core Bluetooth Background Processing for iOS Apps(API Reference) the fifth part

    Core Bluetooth Background Processing for iOS Apps 对于iOS程序,它是至关重要的,它知道你的app是否在前台后者后台运行.一个app后台比前台必须是行 ...

  8. IOS 4.0 以上版本 home键退出 后台执行代码

    今天调查了下IOS 4.0 支持的多任务的事宜,系统是4.2, 初步结果如下: Ios 4.0 多任务不是传统意义上的多任务.只是把程序的状态保存起来,程序挂起.因为Apple还没准备好多任务同时运行 ...

  9. 超酷的iOS动画集合

    github地址: https://github.com/jackyzh/awesome-ios-animation awesome-ios-animation Awesome iOS Animati ...

  10. IOS 后台运行 播放音乐

    iOS 4开始引入的multitask,我们可以实现像ipod程序那样在后台播放音频了.如果音频操作是用苹果官方的AVFoundation.framework实现,像用AvAudioPlayer,Av ...

最新文章

  1. vue 怎么全局到入常量_午后躺椅上看关于Vue的20点
  2. 通过反射获取成员变量并使用
  3. Codis的源码编译生成tar包
  4. 漫画:要跳槽?这道缓存设计题你有必要看看!
  5. VMware 6.5下载地址及序列号(转,备用)
  6. ehcache 的 diskStore path
  7. Asp.net发布的CheckList
  8. Linux服务器问题排查工具sar命令 sysstat工具集使用
  9. 过滤器为JSP文件生成静态页面
  10. JVM、JRE、JDK、java ee sdk with jdk四者的区别
  11. 单链表反转--Java实现
  12. Hive窗口函数保姆级教程
  13. C#利用QRCode动态生成自定义二维码图片
  14. 在 Win10系统,所有程序默认都以管理员身份运行
  15. 【在PowerPoint中插入视频的三种方法】
  16. django自带模块实现翻页功能
  17. UC-Android逆向工程师面试第2题分析
  18. USB3.0传输数据、解析处理和帧率计算
  19. memcache 学习
  20. Oracle 字段自增

热门文章

  1. vue cli3.0 解决跨域问题和axios等问题,配合Django
  2. matlab条形图颜色矩阵,Matlab条形图 – 根据符号和大小填充不同颜色的条形图
  3. OFFICE技术讲座:连续内容分断的规则
  4. 怎样获得正确的LINUX用户的文档音乐视频等目录?
  5. C代码中__LINE__输出时与代码行号不同的解决办法
  6. Windows BAT中7zip压缩时排除某些目录
  7. 检查库文件的rpath命令
  8. Linux上RandomAccessFile访问FTP文件出错
  9. 为了中性含义替换man,英文可以引入拼音ren
  10. 亲身经历:如何判断一个字符在a/z之前?