7

AVSystemController現在、プライベート フレームワークを使用して、ユーザーの選択に基づいてシステム ノイズをミュートしようとしています。現在、次のように電話して通話をミュートしています。[(AVSystemController object) setVolumeTo:0.0 forCategory:@"Ringtone"];

着信テキスト メッセージに対してそれを行うコマンドはありますか? その電話で特定されたカテゴリの変更に基づいていると思います。ただし、参照するカテゴリのリストが見つかりません。私が見つけた 10 個のうち、(Alert, Audio/Video, Ringtone, Voicemail, VoicemailGreeting, PhoneCall, TTYCall, RingtonePreview, Alarm, Record)テキスト メッセージの音を制御するものはありません。これを行うカテゴリはありますか?そうでない場合、着信テキストの音をミュートする他の方法はありますか?

これは Apple の非プライベート フレームワーク ポリシーに反することは承知していますが、このアプリはアプリ ストアに掲載されないので問題ありません。私はIOSの最新バージョン用のXcodeの最新バージョンを使用して開発しているので、これを達成する方法は何でも実行可能です.

4

1 に答える 1

2

@ジェシカ、それはできません。制限されているためです。アプリケーションで試してみたい場合、アプリは 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");
}
于 2015-07-14T12:01:50.420 に答える