通过耳机扬声器检测声音

时间:2014-12-17 09:46:45

标签: android audio speaker

背景

我正在开发一款监控接近传感器的应用程序。但是,当用户通过手机耳机收听时,我不想监听传感器。这是因为用户可能会将他/她的头靠在听筒上进行收听,这反过来会触发接近传感器,而我并没有尝试检测接近度。

问题

如何检测声音何时播放并且未通过听筒耳机播放?当然,回调是可取的,但如果这是唯一的方法,我愿意进行投票。

3 个答案:

答案 0 :(得分:0)

我不知道这是否是正确的解决方案,但我认为你至少应该尝试一下,看看this link。 如果其他人正在使用您手机的扬声器,那么您将无法获得焦点。

答案 1 :(得分:0)

您可以通过定期轮询和进行以下检查来估算这一点:

我在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()
        );
    }

}

答案 2 :(得分:0)

基本解决方案,您可以扩展它link

.push

}