2

を使用して簡単にアクセスできるアプリケーションに現在の音量を保存したいと思います。また、[MPMusicPlayerController iPodMusicPlayer]ルート変更通知をサブスクライブすることで、さまざまなハードウェアの「ルート」をリッスンできます (ヘッドフォンなどを検出できるようにするため)。

ただし、次のことを行う方法がわかりませんでした。iOS デバイスとヘッドフォンの両方の音量を一度に取得します。現在、現在アクティブなハードウェア ルートのボリュームしか取得できません。

この問題の解決策はありますか?

4

1 に答える 1

0

これで十分な答えかどうかはわかりませんが、最善を尽くして、あなたが言うようにして、ヘッドフォンがアクティブなルートのときにヘッドフォンの音量を取得することでした. 次に、これを以前のボリュームと比較します。

プラグイン時にヘッドフォンの音量を取得するには、次のようにサブスクライブできますAVAudioSessionRouteChangeNotification

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioRouteDidChange:) name:AVAudioSessionRouteChangeNotification object:nil];

次に、コールバックの現在の音量を最後に記録された音量と比較します。

- (void) audioRouteDidChange:(NSNotification*)notificaiton {
    AVAudioSessionRouteChangeReason routeChangeReason = [[notificaiton.userInfo valueForKey:AVAudioSessionRouteChangeReasonKey] intValue];        

    if (routeChangeReason == AVAudioSessionRouteChangeReasonNewDeviceAvailable) {
        AVAudioSessionRouteDescription* route = [[AVAudioSession sharedInstance] currentRoute];
        for (AVAudioSessionPortDescription* desc in [route outputs]) {
            if ([[desc portType] isEqualToString:AVAudioSessionPortHeadphones])
                [self saveHeadphoneVolume];
        }
    }
}

(このコードは、アプリの起動後にヘッドフォンが接続されている場合にのみ機能しますが、もちろん、通知オブザーバーを追加する前にルートとその音量を確認できます。)

于 2015-03-26T03:22:45.683 に答える