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); } };