Отменить громкость звонка в приложениях для iPhone

Я создал приложение, которое легко воспроизводит множество звуков:

AudioServicesPlaySystemSound(someSoundID);

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

Есть ли простой способ отменить это и фактически изменить громкость моего приложения?


person Dimitris    schedule 22.06.2009    source источник


Ответы (2)


Я нашел решение, которое, как мне казалось, было бы распространенной проблемой. Итак, вот как ваше приложение может иметь собственную громкость и не вмешиваться в громкость звонка пользователя, даже если вы воспроизводите звуки только как системные звуки.

Вы должны импортировать структуру AVFoundation, а в объекте, который остается загруженным все время, пока выполняется ваше приложение (или просмотр, или делегат приложения), вы инициализируете AVAudioPlayer, даете ему файл для воспроизведения и устанавливаете его на «prepareToPlay». ..

Это то, что я сделал в основном представлении (которое используется для загрузки других представлений в качестве подпредставлений): в файле заголовка:

#import <AVFoundation/AVFoundation.h>

@interface MainViewController : UIViewController {
    AVAudioPlayer *volumeOverridePlayer;
}

@property (nonatomic, retain) AVAudioPlayer *volumeOverridePlayer;

В файле реализации:

    @synthesize volumeOverridePlayer;

- (void)viewDidLoad
{
    [super viewDidLoad];

    volumeOverridePlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"something" ofType:@"caf"]] error:nil];
    [volumeOverridePlayer prepareToPlay];
//...
}

Просто оставьте плеер готовым к воспроизведению вашего файла и наслаждайтесь собственным регулятором громкости, не проигрывая через него звуки! И, конечно же, не забудьте освободить его в режиме dealloc.

person Dimitris    schedule 06.07.2009
comment
Возвращаясь спустя много времени после того, как я опубликовал это, хочу сказать, что я обнаружил, что он работал только для уменьшения громкости, а не для ее увеличения ... В любом случае, с тех пор я использую AVAudioplayers для воспроизведения своих звуков и редко (если ever) воспроизводить их через оповещения. - person Dimitris; 22.10.2009
comment
это старая тема, но мне интересно, может быть, в новом SDK есть некоторые изменения: я хочу, чтобы мое приложение воспроизводило звуковой сигнал из файла независимо от громкости звонка - и даже не позволяло пользователю играть с громкостью или изменять ее. я хочу быть максимально громким без какого-либо вмешательства со стороны пользователя (уменьшить громкость звонка или даже перевести его в режим отключения звука - я все равно хочу воспроизводить тон как можно громче) - что я могу сделать? мой код использует AvAudioPlayer, и он не работает для меня ... - person Itay Levin; 01.12.2010
comment
Попробуйте AudioServicesPlaySystemSound (someSoundID); Я полагаю, что звуки оповещения используют громкость звонка телефона. - person Dimitris; 01.12.2010

Из того, что я вижу в документации Apple, здесь есть две проблемы. 1. Приложение и объем ОС / оборудования могут управляться только оборудованием / пользователем. 2. Вы проигрываете системный звук. Я считаю, что системным звуком управляет ОС, так что вам здесь не повезло, если вы не воспроизводите настоящие звуковые файлы. Если вы можете использовать звуковые файлы, посмотрите здесь.

Удачи!

person Simon    schedule 25.06.2009
comment
Я проигрываю звуковые файлы, просто проигрываю их как Системные звуки. Apple предлагает проигрывать короткие звуки (менее 30 секунд) таким образом. Если это невозможно сделать таким образом, мне, возможно, придется поступить иначе, как вы предлагаете. Спасибо :) - person Dimitris; 25.06.2009