AudioSessionInitialize的修复程序已弃用?

时间:2013-10-31 15:05:22

标签: ios cocoa-touch

Apple没有在Apple Developer网站上发布任何替代代码。

5 个答案:

答案 0 :(得分:9)

1。 对于此代码

AudioSessionInitialize( NULL, NULL, interruptionCallback, self );

替换为

[[AVAudioSession sharedInstance] setActive:YES error:nil];

2。 来自此代码

UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty(
        kAudioSessionProperty_AudioCategory,
        sizeof(sessionCategory),
        &sessionCategory
        );

替换为

UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
[[AVAudioSession sharedInstance]
     setCategory:sessionCategory error:nil];

答案 1 :(得分:8)

你应该使用AVAudioSession。

要替换弃用的AudioSessionInitialize提供的功能(例如,如果您需要指定AudioSessionInterruptionListener回调),您可以订阅AVAudioSessionInterruptionNotification通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioSessionDidChangeInterruptionType:)
        name:AVAudioSessionInterruptionNotification object:[AVAudioSession sharedInstance]];

实现你的audioSessionDidChangeInterruptionType:handler,如:

- (void)audioSessionDidChangeInterruptionType:(NSNotification *)notification
{
    AVAudioSessionInterruptionType interruptionType = [[[notification userInfo]
        objectForKey:AVAudioSessionInterruptionTypeKey] unsignedIntegerValue];
    if (AVAudioSessionInterruptionTypeBegan == interruptionType)
    {
    }
    else if (AVAudioSessionInterruptionTypeEnded == interruptionType)
    {
    }
}

答案 2 :(得分:5)

的等效代码
// C way
UInt32 category = kAudioSessionCategory_MediaPlayback ;
OSStatus result = AudioSessionSetProperty(
  kAudioSessionProperty_AudioCategory, sizeof(category), &category ) ;

if( result ) // handle the error

// Objective-C way
NSError *nsError;
[[AVAudioSession sharedInstance]
  setCategory:AVAudioSessionCategoryPlayback error:&nsError];

if( nsError != nil )  // handle the error

答案 3 :(得分:0)

我们可以迅速添加以下内容

let audioSession = AVAudioSession.sharedInstance()
        do {
            try audioSession.setActive(true)
            try audioSession.setCategory(AVAudioSessionCategoryPlayback)
        } catch {
            print("Setting category to AVAudioSessionCategoryPlayback failed.")
        }

来自:https://developer.apple.com/documentation/avfoundation/avaudiosession

答案 4 :(得分:0)

快速版本:

do {
    try AVAudioSession.sharedInstance().setActive(true)
} catch let error {
    print("\(error.localizedDescription)")
}

do {
    try AVAudioSession.sharedInstance().setCategory(.playback, mode: .spokenAudio)
} catch let error {
    print("\(error.localizedDescription)")
}