1
有人可以確認這是否確實是一個錯誤? (如果是這樣,我會去蘋果公司提交)。iOS:這是一個音頻會話模擬器錯誤?關鍵字:kAudioSessionProperty_AudioRoute kAudioSessionUnsupportedPropertyError
嘗試抓取kAudioSessionProperty_AudioRoute在4.3之前的任何版本的模擬器(這是寫作時的最新版本)上返回錯誤代碼kAudioSessionUnsupportedPropertyError。
這一個很容易重現。
啓動一個新的項目(我使用的Xcode 4.0.2建立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再次運行 - OK
的iPad模擬器4.2運行一遍 - 故障