1

バックグラウンド

近接センサーを監視するアプリを開発しています。ただし、ユーザーが電話の耳のスピーカーから何かを聞いている間は、センサーを監視したくありません。これは、おそらくユーザーが受話器に頭を当てて聞くためです。これにより、近接センサーがトリガーされます。私は頭の近接を検出しようとはしていません。

質問

ハンドセットのイヤー スピーカーから音が再生されているときと再生されていないときをどのように検出できますか? もちろん、コールバックが望ましいですが、それが唯一の方法である場合は、喜んでポーリングします。

4

3 に答える 3

1

これは、定期的にポーリングして次のチェックを行うことで概算できます。

これを 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()
        );
    }

}
于 2014-12-18T08:57:56.850 に答える
0

それが正しい解決策かどうかはわかりませんが、少なくとも試してみるべきだと思います。このリンクを確認してください。理論的には、他の誰かがあなたの電話のスピーカーを使用している場合、フォーカスを受け取ることはできません。

于 2014-12-17T10:31:06.720 に答える