2012-04-04 49 views
7

Tôi hiện đang cố gắng sử dụng khung công tác cá nhân AVSystemController để tắt âm thanh hệ thống dựa trên lựa chọn của người dùng. Tôi hiện đang tắt tiếng cuộc gọi điện thoại bằng cách gọi: [(AVSystemController object) setVolumeTo:0.0 forCategory:@"Ringtone"];Làm cách nào để tắt tiếng tin nhắn văn bản trên iPhone?

Có lệnh nào để thực hiện điều đó cho tin nhắn văn bản đến không? Tôi tưởng tượng nó sẽ dựa trên sự thay đổi trong danh mục được xác định trong cuộc gọi đó. Tuy nhiên, tôi không thể tìm thấy danh sách các danh mục để tham khảo. Trong số 10 tôi đã có thể tìm thấy (Alert, Audio/Video, Ringtone, Voicemail, VoicemailGreeting, PhoneCall, TTYCall, RingtonePreview, Alarm, Record), không ai trong số họ điều chỉnh âm thanh tin nhắn văn bản. Có một loại để làm điều này? Nếu không, có cách nào khác để tắt âm thanh từ các văn bản gửi đến không?

Tôi nhận thấy điều này đi ngược lại chính sách không có khung công khai của Apple nhưng ứng dụng này sẽ không xuất hiện trên cửa hàng ứng dụng nên không có vấn đề gì. Tôi đang phát triển nó bằng cách sử dụng phiên bản mới nhất của Xcode cho phiên bản mới nhất của IOS, vì vậy bất kỳ phương pháp nào để thực hiện việc này đều có thể thực hiện được.

+0

tôi nghĩ rằng điều này sẽ giúp bạn http://stackoverflow.com/questions/12725548/iphone-block-sms-using-xcoding-private-frameworks-whatever –

Trả lời

1

@Jessica, Bạn không thể làm điều đó, bcos bị hạn chế. nếu bạn muốn dùng thử trong ứng dụng của mình thì ứng dụng của bạn có thể bị Từ chối trong Cửa hàng ứng dụng.

Vì vậy, sử dụng API công khai, điều đó là không thể.

Liên kết bạn tìm thấy đang sử dụng các API riêng tư, không được ghi chép hoặc đảm bảo để hoạt động theo cách bạn mong đợi. Nếu bạn cố gắng phát hành ứng dụng Cửa hàng ứng dụng gọi là API riêng tư, ứng dụng sẽ tự động bị từ chối.

nếu bạn muốn kiểm tra, cho dù là im lặng hay không, sau đó sử dụng dưới mã,

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

} 

Tuyên bố này ngay trong bộ điều khiển xem, bạn muốn chỉ cần kiểm tra

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

else { 
    NSLog(@"not silenced"); 
} 
Các vấn đề liên quan