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); } };
'Before 2022 > Android' 카테고리의 다른 글
안드로이드 Audio Focus를 이용하여 다른 앱 음악 일시 정지 시키기 (0) | 2018.12.28 |
---|---|
안드로이드 KeyStore 비대칭(공개키, RSA) 암호화 (0) | 2018.12.28 |
오디오 기능이 연결된 페어링 상태의 블루투스 기기가 있는지 체크 (0) | 2018.12.12 |
안드로이드 뒤로가기(Back) 버튼 두번 눌러 앱 종료 (0) | 2018.12.12 |
안드로이드 소프트 키 제어 (0) | 2018.12.12 |