2012-04-04 13 views
7

Ich versuche derzeit, das private Framework AVSystemController zu verwenden, um Systemgeräusche basierend auf der Auswahl des Benutzers stumm zu schalten. Ich stoppe derzeit Telefonanrufe durch Anrufen: [(AVSystemController object) setVolumeTo:0.0 forCategory:@"Ringtone"];Wie kann ich eingehende iPhone Textnachrichten programmgesteuert stummschalten?

Gibt es einen Befehl, um das für eingehende Textnachrichten zu tun? Ich stelle mir vor, dass es auf einer Änderung in der Kategorie basieren würde, die in diesem Aufruf identifiziert wird. Ich kann jedoch keine Liste der zu referenzierenden Kategorien finden. Von den 10, die ich (Alert, Audio/Video, Ringtone, Voicemail, VoicemailGreeting, PhoneCall, TTYCall, RingtonePreview, Alarm, Record) finden konnte, regelt keiner von ihnen Textnachrichten. Gibt es eine Kategorie, um dies zu tun? Wenn nicht, gibt es eine andere Möglichkeit, den Ton von eingehenden Texten zu unterdrücken?

Ich weiß, dass dies gegen Apples No-private-Frameworks-Richtlinie geht, aber diese App wird nicht auf den App-Store gehen, so dass kein Problem ist. Ich entwickle es mit der neuesten Version von Xcode für die neueste Version von IOS, so dass jede Methode, um dies zu erreichen, machbar wäre.

+0

I denke, das wird dir helfen http://stackoverflow.com/questions/12725548/iphone-block-sms-using-xcoding-private-frameworks-whatever –

Antwort

1

@Jessica, Das geht nicht, weil es eingeschränkt ist. Wenn Sie es in Ihrer Anwendung ausprobieren möchten, wird Ihre App möglicherweise im App Store abgelehnt.

Also, mit öffentlichen APIs ist es nicht möglich.

Der Link, den Sie gefunden haben, verwendet private APIs, die nicht dokumentiert sind oder so funktionieren, wie Sie es erwarten würden. Wenn Sie versucht haben, eine App Store-App freizugeben, die eine private API aufgerufen hat, wird sie automatisch abgelehnt.

, wenn Sie überprüfen möchten, ob still ist oder nicht, dann unter Code verwenden,

-(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; 

} 

dieses Recht in der Steuerung Ansicht Deklarieren, würden Sie einfach überprüfen

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

else { 
    NSLog(@"not silenced"); 
} 
Verwandte Themen