【发布时间】:2014-04-30 17:57:35
【问题描述】:
我有一个使用 CoreBluetooth 后台模式的应用。当某个事件发生时,我需要播放警报声。前台一切正常,所有蓝牙功能在后台正常工作。我也让它在后台安排 UILocalNotification 发出警报的地方工作,但是我不喜欢这些缺乏音量控制,所以想使用 AVAudioPlayer 播放警报声音。
我已将背景模式 audio 添加到我的 .plist 文件中,但无法正常播放声音。
我正在使用单例类作为警报并像这样初始化声音:
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:soundName
ofType:@"caf"]];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
player.numberOfLoops = -1;
[player setVolume:1.0];
我开始这样的声音:
-(void)startAlert
{
playing = YES;
[player play];
if (vibrate)
[self vibratePattern];
}
并将其用于振动:
-(void)vibratePattern
{
if (vibrate && playing) {
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
[self performSelector:@selector(vibratePattern) withObject:nil afterDelay:0.75];
}
}
振动在后台运行良好,但没有声音。
如果我使用Systemsound 播放这样的声音,它可以正常播放(但没有音量控制):
AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &_sound);
AudioServicesPlaySystemSound(_sound);
那么 AVAudioPlayer 不播放声音文件的原因可能是什么?
谢谢
编辑-------
如果应用程序在后台运行时已在播放声音,则会播放该声音。然而,让它在后台运行时开始播放是行不通的。
【问题讨论】:
-
不确定这是否是您的答案,但设置播放器的声音并不会设置全局音量。那么可能是你的音量被调低了吗? Apple 在 iOS7 中进行了更改,不允许您轻松设置全局音量。一个技巧是创建 MPMusicPlayerController 的实例并以编程方式设置音量。这已被弃用。
-
我不确定这是田鼠问题,因为当应用程序处于前台时声音播放正常。更重要的是,我需要在手机的静音开关启用且本地通知不这样做时发出警报。
-
我做到了。没用。似乎声音已经在播放,那么它会在后台继续播放。如果我开始在后台播放它就不会播放
标签: ios objective-c audio avfoundation avaudioplayer