小编Goe*_*her的帖子

iOS AudioSessionSetActive()阻塞主线程?

在我的iOS应用程序中,我正在尝试实现"躲避":当我的应用程序播放一个简短的"命令式"声音时,任何背景音乐都应该降低音量.完成播放声音后,音乐音量应恢复到原始值.

实施后,避免基本上按预期工作.但是,当我在audioPlayerDidFinishPlaying中调用AudioSessionSetActive(NO)时:为了结束闪避,此时发生的任何UI更新都会暂停一小段时间.这包括自定义绘图,以及前者.自动滚动文本等.

现在,问题是:

这是iOS6中的已知问题吗?我在iPod/iOS5上运行相同的代码,我没有看到这种行为.或者我错过了代码中的某些内容?也许你们其中一个人已经遇到同样的问题并找到了可行的解决方案.

非常感谢您的支持,

戈茨

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    //...

    NSError *err = nil;
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:&err];

    //...

}

- (void) playSound {

    // Enable ducking of music playing in the background (code taken from the Breadcrumb iOS Sample)
    UInt32 value = kAudioSessionCategory_MediaPlayback;
    AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(value), &value);

    // Required if using kAudioSessionCategory_MediaPlayback
    value = YES;
    AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(value), &value);

    UInt32 isOtherAudioPlaying = 0;
    UInt32 size = sizeof(isOtherAudioPlaying);
    AudioSessionGetProperty(kAudioSessionProperty_OtherAudioIsPlaying, &size, &isOtherAudioPlaying);

    if (isOtherAudioPlaying) {   
        AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof(value),   &value);
    }

    AudioSessionSetActive(YES); …
Run Code Online (Sandbox Code Playgroud)

multithreading uiview mpmusicplayercontroller ios avaudiosession

9
推荐指数
1
解决办法
2627
查看次数