これで十分な答えかどうかはわかりませんが、最善を尽くして、あなたが言うようにして、ヘッドフォンがアクティブなルートのときにヘッドフォンの音量を取得することでした. 次に、これを以前のボリュームと比較します。
プラグイン時にヘッドフォンの音量を取得するには、次のようにサブスクライブできます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];
}
}
}
(このコードは、アプリの起動後にヘッドフォンが接続されている場合にのみ機能しますが、もちろん、通知オブザーバーを追加する前にルートとその音量を確認できます。)