Before 2022/Android

유선 헤드셋(유선 이어폰)이 연결되어 있는지 체크

Eljoe 2018. 12. 12. 14:49
private boolean headsetCheck(){
        boolean chkFlag = false;

        AudioManager mAudioManager = (AudioManager) context.getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
        AudioDeviceInfo[] devices;

        // API 레벨이 23 미만인 경우(isWiredHeadsetOn 메소드 사용)
        // isWiredHeadsetOn : 현재 헤드셋이 연결되었는가?
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            if (mAudioManager.isWiredHeadsetOn()) {
                chkFlag = true;
            }
        // API 레벨이 23 이상인 경우(getDevices 메소드 사용)
        // getDevices : 현재 연결된 오디오 기기 목록을 가져오는 메소드
        } else {
            devices = mAudioManager.getDevices(AudioManager.GET_DEVICES_ALL);
            // 연결된 기기 목록 중, 헤드셋이 있는가?
            for (AudioDeviceInfo device : devices) {
                if (device.getType() == AudioDeviceInfo.TYPE_WIRED_HEADSET
                        || device.getType() == AudioDeviceInfo.TYPE_WIRED_HEADPHONES) {
                    chkFlag = true;
                }
            }
        }

    return chkFlag;
}


TYPE_WIRED_HEADSET : 음악 + 통화

TYPE_WIRED_HEADPHONES : 음악


2019. 01. 09 수정 사항


Intent의 ACTION_HEADSET_PLUG와 브로드캐스트 리시버를 이용하면 코드가 더욱 간결해진다.

@Override
public void registHeadsetReceiver(Activity activity) {
	IntentFilter intentFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
	activity.registerReceiver(mHeadsetBroadcastReceiver, intentFilter);
}

private BroadcastReceiver mHeadsetBroadcastReceiver = new BroadcastReceiver() {
	@Override
	public void onReceive(Context context, Intent intent) {
		//state값을 판별해 헤드셋 잭에 입력이 들어온 경우 수행할 로직을 작성한다  
		yourMethod(intent.getIntExtra("state", 0) > 0);
	}
};