您的位置:首页 > 移动开发 > IOS开发

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

2015-08-29 18:53 423 查看
经常说安卓怎么苦逼,现在终于轮到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];      
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: