Я нашел решение того, что, как я думал, было бы распространенной проблемой. Итак, вот как ваше приложение может иметь собственную громкость, и не мешать громкости звонка пользователя, даже если вы воспроизводите звуки только как системные звуки.
Вы должны импортировать инфраструктуру 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.