如何以编程方式静音传入的iPhone文本消息?

时间:2012-04-04 17:40:05

标签: iphone xcode sms system-sounds

我目前正在尝试使用AVSystemController私有框架根据​​用户的选择来静音系统噪音。我目前正在通过拨打[(AVSystemController object) setVolumeTo:0.0 forCategory:@"Ringtone"];

来打电话

是否有命令对传入的短信执行此操作?我想这将基于该呼叫中确定的​​类别的变化。但是,我找不到要引用的类别列表。在我能够找到(Alert, Audio/Video, Ringtone, Voicemail, VoicemailGreeting, PhoneCall, TTYCall, RingtonePreview, Alarm, Record)的10个中,没有一个能够控制短信的声音。有这样的类别吗?如果没有,是否有其他方法可以将传入文本中的声音静音?

我意识到这违反了Apple的非私有框架政策,但这个应用程序不会在应用程序商店上升,所以没有问题。我正在使用最新版本的XOS为最新版本的IOS开发它,所以任何方法都可以实现。

1 个答案:

答案 0 :(得分:1)

@Jessica,你不能这样做,bcos它是受限制的。如果你想在你的应用程序中尝试它,那么你的应用程序可能会在App Store中被拒绝。

所以,使用公共API是不可能的。

您找到的链接使用私有API,这些API未记录或保证按您期望的方式工作。如果您尝试发布一个名为私有API的App Store应用程序,它将被自动拒绝。

如果你想检查,是否是沉默,那么使用下面的代码,

    -(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");
}