Подтвердить что ты не робот

Исправление для AudioSessionInitialize устарело?

Apple не опубликовала альтернативный код для этого на сайте Apple Developer.

4b9b3361

Ответ 1

Вы должны использовать AVAudioSession.

Чтобы заменить функциональность, предоставляемую устаревшим AudioSessionInitialize (например, если вам нужно указать обратный вызов AudioSessionInterruptionListener), вы можете подписаться на уведомление AVAudioSessionInterruptionNotification:

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

И реализуйте свой audioSessionDidChangeInterruptionType: обработчик вроде:

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

Ответ 2

Эквивалентный код

// 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

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];