これは、定期的にポーリングして次のチェックを行うことで概算できます。
これを Android 4.3 でテストしたところ、システムの電話アプリ、Viber、Skype で問題なく動作するようでした。ただし、イヤホンから再生される音楽や電話以外の音は検出されないようです。イヤピースは一般的に電話にのみ使用されるように見えるため、これは大きな問題ではないと思います。
例
public class EarpieceSpeakerState {
private AudioManager audioManager;
public EarpieceSpeakerState(AudioManager audioManager) {
this.audioManager = audioManager;
}
public boolean usingEarpieceSpeaker() {
return playingSound()
&& routingToEarpiece();
}
private boolean playingSound() {
return audioManager.getMode() != AudioManager.MODE_NORMAL;
}
private boolean routingToEarpiece() {
return !(
audioManager.isSpeakerphoneOn()
|| audioManager.isBluetoothScoOn()
|| audioManager.isBluetoothA2dpOn()
|| audioManager.isWiredHeadsetOn()
);
}
}