Я хочу воспроизводить звук даже в бесшумном режиме на iPhone.
Можно ли это сделать с помощью AVAudioPlayer (без использования AVAudioSession).
(для ios 3.0 +)
Спасибо заранее.
Я хочу воспроизводить звук даже в бесшумном режиме на iPhone.
Можно ли это сделать с помощью AVAudioPlayer (без использования AVAudioSession).
(для ios 3.0 +)
Спасибо заранее.
Собственно, вы можете это сделать. Он управляется с помощью аудио сессии и не имеет ничего общего с AVAudioPlayer. Почему вы не хотите использовать AudioSession? Они играют хорошо вместе...
В вашем приложении вы должны инициализировать аудио сессию, а затем вы также можете указать, какой звук вы собираетесь играть. Если вы музыкальный плеер, то имеет смысл, что пользователь хотел бы услышать звук даже при включенном кольцевом/бесшумном переключателе.
AudioSessionInitialize (NULL, NULL, NULL, NULL);
AudioSessionSetActive(true);
// Allow playback even if Ring/Silent switch is on mute
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,
sizeof(sessionCategory),&sessionCategory);
У меня есть приложение, которое я делаю именно так, и использую AVAudioPlayer для воспроизведения звука, а при включенном кольцевом/бесшумном переключателе я слышу звук.
ОБНОВЛЕНИЕ (11/6/2013)
В приложении, о котором я упоминал выше, где я успешно использовал код выше, у меня (в течение некоторого времени) вместо этого использовался следующий код:
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *error = nil;
BOOL result = NO;
if ([audioSession respondsToSelector:@selector(setActive:withOptions:error:)]) {
result = [audioSession setActive:YES withOptions:0 error:&error]; // iOS6+
} else {
[audioSession setActive:YES withFlags:0 error:&error]; // iOS5 and below
}
if (!result && error) {
// deal with the error
}
error = nil;
result = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&error];
if (!result && error) {
// deal with the error
}
Я думал, что опубликую это как альтернативу, в свете последнего комментария к этому ответу.: -)
Решение MarkGranoff является правильным. Однако, если вы предпочитаете делать это в Obj-c вместо C, также работает следующее:
NSError *error = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
[[AVAudioSession sharedInstance] setActive:YES error:&error];
Вышеуказанные ответы верны. Ниже приведена версия Swift.
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
//print("AVAudioSession Category Playback OK")
do {
try AVAudioSession.sharedInstance().setActive(true)
//print("AVAudioSession is Active")
} catch _ as NSError {
//print(error.localizedDescription)
}
} catch _ as NSError {
//print(error.localizedDescription)
}