2017-11-30 5 views
0

私が現在構築しているアプリでは、[AVAudioSession sharedInstance]の現在のカテゴリに応じていくつか処理する必要があります。このカテゴリは実行時に変更され、通知センターでAVAudioSessionRouteChangeNotificationを確認して変更を追跡しようとしています。AVAudioSessionが通知を鳴らしていないことを確認する

しかし、私が何を通知しようとしても、解雇されていません(少なくとも、セレクタメソッドでは何も受信されていません)。

いくつかのテストサンプルコード。

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sessionRouteDidChange:) name:AVAudioSessionRouteChangeNotification object:nil]; 
    return YES; 
} 
- (void)sessionRouteDidChange:(NSNotification *)notification 
{ 
    NSLog(@"SESSION ROUTE CHANGED"); 
} 

ViewController.m

- (void)changeAudioCategory:(AVAudioSessionCategory)category{ 
     [[AVAudioSession sharedInstance] setActive:NO error:nil]; 
     AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
     NSError *setCategoryError = nil; 
     BOOL success = [audioSession setCategory:category error:&setCategoryError]; 
     if (!success) { 
      NSLog(@"ERROR"); 
     } 
     [audioSession setActive:YES error:nil]; 

     /* Logging the current category */ 
     NSLog(@"AVAUDIOSESSION CATEGORY %@", audioSession.category); 
} 

私は、カテゴリの変更時sessionRouteDidChangeに通知を送信するためにAppDelegateに設定したオブザーバを期待していますこのメソッドの内部では何も起こりません。

私が試したことは何ですか?複数のiOSバージョンとiPhoneモデルの

  • テストが、どれもダブル、トリプルが、私はどこでも

私が行方不明ですかについての任意のアイデアをオブザーバを削除するわけではないことを確認

  • を働いていませんか?

  • 答えて

    0

    カテゴリを変更するのはルート変更ではないため、通知は送信されません。あなたが望むのはKVO observecategoryのプロパティです。

    たとえば、イヤホンを差し込んだときなど、音声ルートを変更するとルートが変更されます。

    +1

    私は見る! AVAudioSessionRouteChangeReasonCategoryChangeは、私がカテゴリ変更について通知を受けることができると完全に確信しました。私はカテゴリのプロパティがKVOに準拠しているかどうかはわかりません。私はこれを解決する他の方法を見つける必要があると思います:)ありがとうございました! – leaveyourfears

    関連する問題