Как программно отключить входящие текстовые сообщения iPhone?

В настоящее время я пытаюсь использовать частную структуру AVSystemController для отключения системных шумов в зависимости от выбора пользователя. В настоящее время я отключаю телефонные звонки, звоня: [(AVSystemController object) setVolumeTo:0.0 forCategory:@"Ringtone"];

Есть ли команда сделать это для входящих текстовых сообщений? Я предполагаю, что это будет основано на изменении категории, указанной в этом звонке. Однако я не могу найти список категорий для ссылки. Из 10, которые мне удалось найти (Alert, Audio/Video, Ringtone, Voicemail, VoicemailGreeting, PhoneCall, TTYCall, RingtonePreview, Alarm, Record), ни один из них не регулирует звуки текстовых сообщений. Есть ли категория для этого? Если нет, то есть ли другой способ отключить звук от входящих текстов?

Я понимаю, что это противоречит политике Apple, запрещающей частные платформы, но это приложение не появится в магазине приложений, так что это не проблема. Я разрабатываю его, используя последнюю версию Xcode для последней версии IOS, поэтому любой метод для этого будет выполним.


person Jessica    schedule 04.04.2012    source источник
comment
Я думаю, это поможет вам stackoverflow.com/questions/12725548/   -  person rohit Sidpara    schedule 23.06.2015


Ответы (1)


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

Таким образом, использование общедоступных API невозможно.

Найденная вами ссылка использует частные API, которые не задокументированы и не гарантируют, что они будут работать так, как вы ожидаете. Если вы попытаетесь выпустить приложение из App Store, которое вызывает частный API, оно будет автоматически отклонено.

если вы хотите проверить, молчит ли он или нет, используйте приведенный ниже код,

    -(BOOL)silenced {
         #if TARGET_IPHONE_SIMULATOR
             // return NO in simulator. Code causes crashes for some reason.
             return NO;
         #endif

        CFStringRef state;
        UInt32 propertySize = sizeof(CFStringRef);
        AudioSessionInitialize(NULL, NULL, NULL, NULL);
        AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
        if(CFStringGetLength(state) > 0)
                return NO;
        else
                return YES;

        }


For completeness, building off this link from Dan Bon, I implement the following method to solve this problem in my apps. One thing to note is that the code checks for the iPhone simulator first - executing the below code will crash the simulator. Anyone know why?

-(BOOL)silenced {
     #if TARGET_IPHONE_SIMULATOR
         // return NO in simulator. Code causes crashes for some reason.
     return NO;
     #endif

    CFStringRef state;
    UInt32 propertySize = sizeof(CFStringRef);
    AudioSessionInitialize(NULL, NULL, NULL, NULL);
    AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
    if(CFStringGetLength(state) > 0)
        return NO;
    else
        return YES;

}

Объявив это право в контроллере представления, вы бы просто проверили

if ([self silenced]) {
     NSLog(@"silenced");

else {
     NSLog(@"not silenced");
}
person Mehul    schedule 14.07.2015