在应用程序处于非活动状态时播放声音/在静音/环形切换时在后台播放

时间:2011-06-06 09:04:33

标签: iphone audio ios4

我希望在我的应用程序处于后台时播放声音并尊重静音响铃开关。

当我的应用不在前台时,我设法播放声音。我基本上使用以下代码来播放我的声音:

sound = [[AVAudioPlayer alloc] initWithContentsOfURL:fileUrl error:nil];
sound.numberOfLoops = -1;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
/* ... */
[sound playAtTime:0];

AVAudioSessionCategoryPlayback使我的应用程序忽略静音/铃声开关并在后台播放声音。

由于我想拥有没有第一个行为的最后一个行为,我搜索了一个解决方案来查询silent / rind-switch的状态。我尝试了不同的方法,但这似乎适用于大多数用户:

 -(BOOL)silenced {
 #if TARGET_IPHONE_SIMULATOR
     // return NO in simulator. Code causes crashes for some reason.
     return NO;
 #endif

CFStringRef state;
UInt32 propertySize = sizeof(CFStringRef);
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
if(CFStringGetLength(state) > 0)
        return NO;
else
        return YES;

}

我在这里找到了: How to programmatically sense the iPhone mute switch?

此代码对我不起作用。尽管手机静音“状态”并非空白。

有没有人有想法,为什么这不适合我?我正在开发和测试iOS 4.3。

THX。

编辑我使用CFShow显示kAudioSessionProperty_AudioRoute的内容,每次都是“Speaker”,但我改变了静音/响铃开关的状态。

0 个答案:

没有答案