iPhone — AVAudioPlayer, kAudioSessionCategory_AmbientSound и музыка для iPod

StackOverflow https://stackoverflow.com/questions/872001

  •  22-08-2019
  •  | 
  •  

Вопрос

Я использую следующий аудиосеанс в своем делегате приложения:

  AudioSessionInitialize(NULL, NULL, NULL, self);
  UInt32 sessionCategory = kAudioSessionCategory_AmbientSound;
  AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);

  AudioSessionSetActive(true);

Я хочу, чтобы пользователь мог одновременно воспроизводить музыку с iPod и использовать мое приложение, и это здорово и отлично работает...мое приложение отключается и позволяет воспроизводить музыку с iPod.

Проблема, с которой я столкнулся, заключается в том, что...после того, как пользователь выходит из моего приложения, заходит в приложение iPod и делает паузу, когда он возвращается в мое приложение, ни один из моих звуков не работает.Как будто он все еще думает, что сеанс iPod активен, хотя музыка не воспроизводится!

По сути, я просто хочу возобновить аудиосессию после того, как музыка на iPod была приостановлена.В нынешнем виде после того, как я всегда воспроизводил музыку через приложение iPod, я совершенно не могу вернуть звуки своего приложения, пока не перекомпилирую его.:( Есть у кого идеи?

Редактировать:Я забыл упомянуть, что я использую базовую реализацию класса AVAudioPlayer для воспроизведения звука моего приложения.

Спасибо!

Это было полезно?

Решение

Хорошо, просто подумал, что буду держать всех в курсе, вдруг это кому-то поможет...то, что я сделал, вероятно, было хакерским, но, похоже, помогло!

    UInt32 isPlaying;
    UInt32 propertySize = sizeof(isPlaying);
    OSStatus status;

    // check to see if their iPod music is playing
    status = AudioSessionGetProperty(kAudioSessionProperty_OtherAudioIsPlaying, &propertySize, &isPlaying);

    // set the session category accordingly
    if(!isPlaying) {
      NSLog(@"...SoloAmbientSound");
      UInt32 sessionCategory = kAudioSessionCategory_SoloAmbientSound;
      AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
    }else{
      NSLog(@"...AmbientSound");
      UInt32 sessionCategory = kAudioSessionCategory_AmbientSound;
      AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
    }

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top