Androidでサウンド録音用のアプリを作っているのですが、アプリが起動したときに内蔵のマイクか、4ピンオーディオジャックでつながれたヘッドセットのマイクのどちらかを判定する方法を調べてみました。
ターゲットはAndroid 2.3のNexus Oneです。
結論を先に書くとありません。
AudioManagerのisWiredHeadsetOn()は3ピンのコネクタであっても4ピンのコネクタであっても接続されていればtrueが返ってきます。
isWiredHeadsetOn()はAPI14以降は非推奨になています。
GoogleのマニュアルにはIntent.ACTION_HEADSET_PLUGはAPI21以降になっているのですがNexus Oneでも登録すると飛んできます。
onReceive()のstateはisWiredHeadsetOn()と同じ値のようです。マイク付きの場合2が返ってくるというページもありますが、Nexus Oneでは返ってきませんし、Googleのマニュアルでも0か1になっています。
でNexus Oneは3ピンと4ピンを認識してないかというと、そうではないです。onReceive()のmicrophoneとして返ってきます。3ピンが接続された場合は0で、4ピンが接続された場合は1です。
しかし起動時にこの値をとる事はできません。。。
いろいろ試していたら、isWiredHeadsetOn()もonReceive()も動かなくなった。壊しちゃったのかな。幻見てたのかな。。。
Androidのアプリでサウンド録音用のアプリの評価はみんな3以下と低いようなのだが、これはアプリの問題ではなくてAndroid自体の問題な気がする。
どうも接触抵抗とかが影響していて、ピンを拭いたりすると認識したりする。マイクやヘッドセットの認識詳しい資料探したが見つからなかった。ご存知の方教えてください。
岐阜の丸紅食品の水まんじゅうのケースで集音マイク作ってみました。