2012-04-04 8 views
7

Attualmente sto cercando di utilizzare il framework privato AVSystemController per silenziare i rumori di sistema in base alla selezione dell'utente. Sto attualmente disattivando le chiamate telefoniche chiamando: [(AVSystemController object) setVolumeTo:0.0 forCategory:@"Ringtone"];Come posso disattivare automaticamente i messaggi di testo dell'iPhone in arrivo?

Esiste un comando per farlo per i messaggi di testo in entrata? Immagino che si baserebbe su un cambiamento nella categoria identificata in quella chiamata. Tuttavia, non riesco a trovare un elenco di categorie a cui fare riferimento. Dei 10 sono stato in grado di trovare (Alert, Audio/Video, Ringtone, Voicemail, VoicemailGreeting, PhoneCall, TTYCall, RingtonePreview, Alarm, Record), nessuno di loro governa i suoni dei messaggi di testo. C'è una categoria per fare questo? In caso contrario, esiste un altro modo per disattivare l'audio dai testi in arrivo?

Mi rendo conto che questo va contro la politica di no-private-framework di Apple, ma questa app non salirà nell'app store, quindi non c'è problema. Lo sto sviluppando usando l'ultima versione di Xcode per l'ultima versione di IOS, quindi qualsiasi metodo per farlo sarebbe fattibile.

+0

I pensa che questo ti aiuterà http://stackoverflow.com/questions/12725548/iphone-block-sms-using-xcoding-private-frameworks-whatever –

risposta

1

@Jessica, non è possibile farlo, bcos è limitato. se vuoi provarlo nella tua applicazione, la tua app potrebbe essere Rifiutata nell'App Store.

Quindi, utilizzando le API pubbliche, non è possibile.

Il collegamento che hai trovato utilizza API private, che non sono documentate o garantite per funzionare come ti aspetteresti. Se hai provato a rilasciare un'app App Store che ha chiamato un'API privata, questa verrà automaticamente respinta.

se si desidera controllare, se tace o no, quindi utilizzare sotto codice,

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

} 

Dichiarare questo diritto nel controller della vista, si sarebbe semplicemente controllare

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

else { 
    NSLog(@"not silenced"); 
} 
Problemi correlati