iPadで作業しています。 私はいつユーザーのプラグインヘッドフォンを検出したいと思います。まず、プロパティkAudioSessionProperty_AudioRouteChange
でリスナーを使用しました。ヘッドフォンがまだ接続されているときに、スピーカーに切り替えるためのボタンを追加することを決定するまでは、すべてうまく機能していました。だから私は今問題に直面している、誰かがそれを修正する考えを持っていたかもしれない。ここでオーディオルートが変更されない場合のヘッドフォンプラグインプラグインイベント - iOS
はシナリオです:
- 私はヘッドフォンを差し込む - >私のオーディオのルート変更のコールバックが
- と呼ばれ、その後、私は(私のヘッドフォンのプラグを抜くことなく、)スピーカーの音の切り替え - >オーディオルート変更コールバックがあります
- 私はヘッドホン(音声がまだスピーカーに出力されているとき)を抜きます - >オーディオルートチェンジコールバックが呼び出されていない、これは論理的です。
しかし、ここに私の問題があります。だから私の質問は次のとおりです。この最後のケースでヘッドホンのプラグが抜かれたことを検出する方法がありますか?あなたの助けのための
おかげ
EDIT:
[OK]を、私は回避策が見つかりました:
ヘッドフォンが差し込まれているかどうか、私はテスト機能を実行し、私がする必要があるすべての時間を検出するためにそれは(ブール値を使用する代わりに)知っているが、これはパフォーマンスにはあまり効果がないかもしれないが、それを必要とする人のためのコードはここにある:
//set back the default audio route
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);
//check if this default audio route is Heaphone or Speaker
CFStringRef newAudioRoute;
UInt32 newAudioRouteSize = sizeof(newAudioRoute);
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &newAudioRouteSize, &newAudioRoute);
NSString *newAudioRouteString = (__bridge NSString *)newAudioRoute;
CFRelease(newAudioRoute);
//if this default audio route is not Headphone, it means no headphone is plugged
if ([newAudioRouteString rangeOfString:@"Headphones"].location != NSNotFound){
NSLog(@"Earphone available");
return true;
}
else {
NSLog(@"No Earphone available");
return false;
}
誰かを助けてくれることを願っています!
あなたが戻ってヘッドフォンに音を切り替えて、ヘッドフォンを抜いしようとしてみましたか? iPadはスピーカーに切り替わり、ヘッドフォンを抜くと、再び機能を呼び出す必要はなく、すでにスピーカーに設定されていると思います。 – MMMM
はい私はあなたに同意しますが、私の必要性は、たとえスピーカーを使用していても、ユーザーがヘッドフォンを抜いたことを検出できることです。ブール値をfalseに設定する必要があります。ユーザーはいつも自分が望むことをしているので、すべてのケースを処理する必要があります。 – Cyril
2番目のケースでは、スピーカーをオンに切り替えると、ヘッドフォンを使用してもスピーカーでサウンドを聞くことができなくてはなりません。ヘッドホンも、スピーカーだけでも使えますか? – MMMM