Как отключить системные звуки iOS - PullRequest
8 голосов
/ 08 июня 2011

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

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

Я смотрел на использование AVAudioSession (чтение Аудио сеансы , чтобы узнать больше) и попробовал все AudioSessionCategories .Ни одна из этих категорий не будет отключать звук системы, вместо этого она позволит вам отключать только звуки приложений (iPod) - это бесполезно для моих целей.

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

Последнее замечание: мы упростили настройку уровня (громкости) iPad, добавив MPVolumeView, но мы ожидаем, что пользователь захочетдля воспроизведения музыки с iPod.Если во время воспроизведения музыки на iPod (или музыки из другого приложения) и получения электронной почты вы будете поражены тем, как громко / раздражает эта электронная почта, внезапно становящаяся при прохождении через наш аксессуар.Возможно даже, что это может повредить оборудование.: D

Ответы [ 3 ]

14 голосов
/ 10 августа 2011

С помощью 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];
}
3 голосов
/ 09 июля 2012

Используя среду MediaPlayer, мы можем установить уровень звука SYSTEM

[[MPMusicPlayerController applicationMusicPlayer] setVolume:0]; 
1 голос
/ 08 июня 2011

Лучшее, что вы можете сделать, - это побудить своих пользователей перейти в режим полета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...