iOS:这是音频会话模拟器错误吗?keywords:kAudioSessionProperty_AudioRoute k



有人能确认这是否真的是一个bug吗?(如果是这样的话,我会把它提交给苹果公司(。

试图获取kAudioSessionProperty_AudioRoute在4.3之前的任何版本的模拟器上返回错误代码kAudioSSessionUnsupportedPropertyError(这是撰写本文时的最新版本(。

这只极易繁殖。

启动一个新项目(我使用的是Xcode 4.0.2 Build 4A2002a,这是标准版本(,基于窗口的项目"AudioSessionBug">

包括AudioToolbox框架

将应用程序委托的.m文件替换为以下文件:

//
//  AudioSessionBugAppDelegate.m
//  AudioSessionBug
//
//  Created by Pi on 02/07/2011.
//  Copyright 2011 Pi. All rights reserved.
//
#import "AudioSessionBugAppDelegate.h"
#import <AudioToolbox/AudioToolbox.h>
#define SET_PROPERTY( prop, type, val ) 
{ 
OSStatus ret = AudioSessionSetProperty( prop, sizeof( type ), &(type){ val } ); 
if ( ret != kAudioSessionNoError ) 
{ 
NSLog( @"AudioSessionSETProperty failed for: %s!", #prop ); 
return; 
} 
}
enum  {
    kNo = 0,
    kYes = 1
};
// - - - 
@interface AudioSessionBugAppDelegate ( )
- (void) setupSession;
@end
// - - - 
@implementation AudioSessionBugAppDelegate

@synthesize window=_window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    [self.window makeKeyAndVisible];

    [self setupSession];

    return YES;
}
- (void) setupSession
{
    OSStatus result = AudioSessionInitialize( NULL, NULL, NULL, NULL );
    assert( result == kAudioSessionNoError );
    SET_PROPERTY( kAudioSessionProperty_AudioCategory,  UInt32,   kAudioSessionCategory_PlayAndRecord );
    // make sure headphones are plugged in!
    {
        // http://stackoverflow.com/questions/2753562/what-kind-of-routes-could-i-get-back-from-kaudiosessionproperty-audioroute-proper
        CFStringRef state = nil;        
        UInt32 propertySize = sizeof(CFStringRef);
        OSStatus status = AudioSessionGetProperty( kAudioSessionProperty_AudioRoute, &propertySize, &state );
        if ( status == kAudioSessionUnsupportedPropertyError )
        {
            NSLog( @" WTF? GETTING kAudioSessionProperty_AudioRoute GIVES kAudioSessionUnsupportedPropertyError ?!?!? " );
        }
        NSLog( @" OK - done! " );
        exit( 1 );
    }
}
- (void)dealloc
{
    [_window release];
    [super dealloc];
}
@end

检查它是否有效。

现在将部署目标更改为4.3之前的任何内容。比如4.2。

在iPad模拟器4.3上再次运行它--确定
在iPad模拟器4.2上再次运行它--失败

我刚刚收到苹果公司的以下确认:

这是一个在4.3中修复的错误,我们目前没有计划修复模拟器早期版本中的错误

相关内容

  • 没有找到相关文章

最新更新