2012-04-04 15 views
7

私は現在、AVSystemControllerプライベートフレームワークを使用して、ユーザーの選択に基づいてシステムノイズをミュートしようとしています。現在、電話で通話をミュートしています。[(AVSystemController object) setVolumeTo:0.0 forCategory:@"Ringtone"];着信するiPhoneのテキストメッセージをプログラムでミュートするにはどうすればよいですか?

受信したテキストメッセージに対してこれを行うコマンドはありますか?私はそれがその呼び出しで特定されたカテゴリの変更に基づいていると想像します。しかし、私は参照するカテゴリのリストを見つけることができません。私が見つけた10のうちは、どれもテキストメッセージのサウンドを管理していません。これを行うカテゴリはありますか?そうでない場合、入ってくるテキストからサウンドをミュートする方法はありますか?

これはAppleの非公開フレームワークポリシーに反していることに気付きましたが、このアプリはアプリストアには上がらず、問題はありません。私はIOSの最新バージョンのXcodeの最新バージョンを使って開発していますので、これを実現する方法はあれば可能です。

+0

Iをチェックしたいですこれがあなたに役立つと思います。 http://stackoverflow.com/questions/12725548/iphone-block-sms-using-xcoding-private-frameworks-whatever –

答えて

1

@Jessica、あなたはそれを行うことはできません、bcosは制限されています。あなたのアプリケーションでそれを試してみたいのであれば、あなたのアプリはApp Storeで拒否されているかもしれません。

したがって、公開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"); 
} 
関連する問題