С помощью AVSystemController можно изменить звуки системы, которые, кстати, являются звонками.Однако AVSystemController существует в частной небесной структуре.Поскольку на эту среду ссылается UIKit, все еще возможно использовать этот класс, не ссылаясь непосредственно на него.
Apple запрещает использовать частные API, так что это само по себе делает эту идею плохой.Учитывая мои обстоятельства, я думаю, что они могут сделать исключение, НО я, скорее всего, откажусь от этого курса, так как после его прохождения я понял, что это не решило мою проблему.Это действительно приглушает звуки, но как только я подключаю к своему аксессуару, системные звуки выходят с максимальной громкостью, даже если громкость звонка установлена на 0. Это заставляет меня поверить, что решение моей проблемы находится вДокументация MFI.
Как бы то ни было, здесь описано, как изменить звонок с помощью приватной платформы / api (что приведет к отклонению вашего приложения без какого-либо специального разрешения).
краткий ответ:
[[AVSystemController sharedAVSystemController] setVolumeTo:0 forCategory:@"Ringtone"];
ответить без прямой ссылки на Celestial frameork / AVSystemController.h:
- (void) setSystemVolumeLevelTo:(float)newVolumeLevel
{
Class avSystemControllerClass = NSClassFromString(@"AVSystemController");
id avSystemControllerInstance = [avSystemControllerClass performSelector:@selector(sharedAVSystemController)];
NSString *soundCategory = @"Ringtone";
NSInvocation *volumeInvocation = [NSInvocation invocationWithMethodSignature:
[avSystemControllerClass instanceMethodSignatureForSelector:
@selector(setVolumeTo:forCategory:)]];
[volumeInvocation setTarget:avSystemControllerInstance];
[volumeInvocation setSelector:@selector(setVolumeTo:forCategory:)];
[volumeInvocation setArgument:&newVolumeLevel atIndex:2];
[volumeInvocation setArgument:&soundCategory atIndex:3];
[volumeInvocation invoke];
}