ios后台播放声音的三种实现方式

简介: ios后台播放声音的三种实现方式

经常说安卓怎么苦逼,现在终于轮到IOS苦逼了。

安卓的应用在前台和后台一样像播放音乐就播放音乐,没人鸟你。

IOS像后台播放声音就很苦逼了,因为IOS的应用切换到后台,应用会被挂起,非特别的应用不能在播放声音。经过不泄的努力终于找到3种解决方案.

1.把你的应用后台播放程序,新的XCODE勾选就可以,老版本的XCODE只有在*.plist文件中加属性值了。这个苹果审核很严,非后台播放程序,你设置了不会让你通过的。

使用后台播放声音测试:

当你的应用在正播放音乐时进入后台后,继续播放音乐。

当你的应用进入后台前不播放声音,那么你的应用在后台播放声音,对不起你的应用没有任何屁放出。

看来后台播放声音就为了播放器专做的,你的应用没事开启这个功能徒增被驳回的风险。阿门,好危险,赶紧远离它。

2.服务通过APNS推送过来的消息中包含有小的声音文件。你的应用收到后会播放这个声音。APNS是针对整个手机的,就是你的手机关机,只要应用不解绑定和服务的PUSH连接,那么你的手机也能收道通知。

通过APNS推送过来的消息中设置的大都是default,所以收到的都是一样的声音,你可以修改发送的声音文件的名称,但是它肯定不支持.mp3(已经测试过)。若通过APNS发送声音文件的方式,收到响应超延迟不是一般的大,延迟几分钟也有可能,必定你的声音经过一大圈传输。再加上APNS本来就有漏包率,通过个推丢失和延迟更大些。若你受得了这种延迟可以采用这种方式。

如:

更多细节,请参考 Apple Push Notification Service Programming Guide。
载体(payload)是 JSON 字符串(最长 256 字节),封装了你发送给 iOS 应用的信息。这是一个 payload 的例子:
{
   "aps": {
        "alert" : "Yougot a new message!" ,
        "badge" : 5,
        "sound" : "beep.wav"},
    "acme1" : "bar",
    "acme2" : 42
}

3.弹出本地通知,并在本地通知中播放音乐。

这种通知的场景有三种:

第一种场景:客户端(可能在前台,也可能在后台)轮询向服务发了HTTP请求,服务收到请求后给予正确的响应,你需要给用户(不确定是前台或后台)播放一段音乐来提醒用户。

第二种场景:用户在前台的操作没有完成所有处理而切换到后台,导致在向服务器发了HTTP请求,服务器收到请求后给予正确的响应,客户端(可能在前台,也可能在后台)需要给用户(不确定是前台或后台)播放一段音乐来提醒用户。

第三中场景:服务器和客户端有socket长连接,服务器通过长连接发送过来订单通知,客户端在收到订单通知,用户可能在后台,像立刻想播放一段音乐来通知用户有新订单了,要求0延迟。


UILocalNotification *notification=[[UILocalNotification alloc] init];

if (notification!=nil) {

NSDate *now=[NSDate new];

notification.fireDate=[now dateByAddingTimeInterval:0];//立即通知

notification.repeatInterval=0;//循环次数,

notification.timeZone=[NSTimeZone defaultTimeZone];

notification.applicationIconBadgeNumber=0; //应用的红色数字

notification.soundName= UILocalNotificationDefaultSoundName;//声音,可以换成alarm.soundName = @”myMusic.caf”

//去掉下面2行就不会弹出提示框

notification.alertBody=@”通知内容”;//提示信息 弹出提示框

notification.alertAction = @”打开”; //提示框按钮

//notification.hasAction = NO; //是否显示额外的按钮,为no时alertAction消失

   // NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"someValue" forKey:@"someKey"];
    //notification.userInfo = infoDict; //添加额外的信息

    [[UIApplication sharedApplication] scheduleLocalNotification:notification];      
}
目录
相关文章
|
4月前
|
编解码 Linux 开发工具
iOS平台如何实现RTSP|RTMP播放端录像?
我们在做RTSP、RTMP直播播放器的时候,有个比较重要的功能,就是拉流端实时录像,包括设置单个录像文件大小、文件前缀、audio转AAC、只录制视频或只录制音频、开始录像、停止录像事件状态回调等。
|
6月前
|
iOS开发
技术好文:xcode动态图,ios实现动态图,iosgif,暂停和继续播放
技术好文:xcode动态图,ios实现动态图,iosgif,暂停和继续播放
58 1
|
7月前
|
iOS开发
iOS中如何显示后台返回的带有html标签的富文本字符串
iOS中如何显示后台返回的带有html标签的富文本字符串
62 0
|
7月前
|
定位技术 开发工具 iOS开发
ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
61 0
|
编解码 开发工具 Android开发
安卓端/iOS端如何播放4K分辨率的RTMP/RTSP流
4K分辨率即4096×2160的像素分辨率,它是2K投影机和高清电视分辨率的4倍,属于超高清分辨率。在此分辨率下,观众将可以看清画面中的每一个细节,每一个特写。影院如果采用惊人的4096×2160像素,无论在影院的哪个位置,观众都可以清楚的看到画面的每一个细节,影片色彩鲜艳、文字清晰锐丽,再配合超真实音效,这种感觉真的是一种难以言传的享受。
325 0
安卓端/iOS端如何播放4K分辨率的RTMP/RTSP流
|
7月前
|
存储 移动开发 JavaScript
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
|
开发工具 图形学 Android开发
Windows/Android/IOS平台如何在Unity3d播放RTSP/RTMP流
如果基于Unity3d完全重新开发一个播放器,代价大,周期长,不适合快速出产品,最好的方式就是集成现有Native平台上成熟稳定播放器.
152 1
|
Web App开发 Android开发 iOS开发
iOS 后台程序
iOS 后台程序
174 0
|
iOS开发
iOS 多条音频拼接为一条音频进行播放
把多条mp3音频合并为一条保存并进行播放
341 0