2012-04-04 13 views
7

मैं वर्तमान में उपयोगकर्ता के चयन के आधार पर सिस्टम शोर म्यूट करने के लिए AVSystemController निजी ढांचे का उपयोग करने का प्रयास कर रहा हूं। मैं वर्तमान में फोन करके कॉल कर रहा हूं: [(AVSystemController object) setVolumeTo:0.0 forCategory:@"Ringtone"];प्रोग्रामिंग के आने वाले आईफोन टेक्स्ट संदेशों को मैं कैसे म्यूट कर सकता हूं?

क्या इनकमिंग टेक्स्ट संदेशों के लिए ऐसा करने का कोई आदेश है? मुझे लगता है कि यह उस कॉल में पहचाने गए वर्ग में बदलाव के आधार पर होगा। हालांकि, मुझे संदर्भ में श्रेणियों की एक सूची नहीं मिल रही है। 10 में से मैं (Alert, Audio/Video, Ringtone, Voicemail, VoicemailGreeting, PhoneCall, TTYCall, RingtonePreview, Alarm, Record) ढूंढने में सक्षम हूं, उनमें से कोई भी टेक्स्ट संदेश ध्वनियों को नियंत्रित नहीं करता है। क्या ऐसा करने के लिए कोई श्रेणी है? यदि नहीं, तो आने वाले ग्रंथों से ध्वनि को म्यूट करने का कोई और तरीका है?

मुझे एहसास है कि यह ऐप्पल की गैर-निजी-ढांचे नीति के खिलाफ है, लेकिन यह ऐप ऐप स्टोर पर नहीं जायेगा, इसलिए कोई समस्या नहीं है। मैं आईओएस के नवीनतम संस्करण के लिए एक्सकोड के नवीनतम संस्करण का उपयोग कर इसे विकसित कर रहा हूं, इसलिए इसे पूरा करने के लिए कोई भी विधि करने योग्य होगा।

+0

मैं लगता है कि यह आप में मदद मिलेगी http://stackoverflow.com/questions/12725548/iphone-block-sms-using-xcoding-private-frameworks-whatever –

उत्तर

1

@ जेसिका, आप ऐसा नहीं कर सकते हैं, यह प्रतिबंधित है। यदि आप इसे अपने एप्लिकेशन में आजमा सकते हैं, तो ऐप स्टोर में आपका ऐप अस्वीकार कर दिया जा सकता है।

तो, सार्वजनिक एपीआई का उपयोग करना, यह संभव नहीं है।

जो लिंक आपने पाया वह निजी एपीआई का उपयोग कर रहा है, जो दस्तावेज नहीं है या जिस तरह से आप उम्मीद कर सकते हैं उस पर काम करने की गारंटी नहीं दी जाती है। यदि आपने ऐप स्टोर ऐप जारी करने का प्रयास किया है जिसे एक निजी एपीआई कहा जाता है, तो इसे स्वचालित रूप से खारिज कर दिया जाएगा।

अगर आप की जाँच करने के लिए, चाहे खामोश है या नहीं चाहते हैं, तो नीचे दिए गए कोड का उपयोग करें,

-(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"); 
} 
संबंधित मुद्दे

 संबंधित मुद्दे