Before 2022/Android

오디오 기능이 연결된 페어링 상태의 블루투스 기기가 있는지 체크

Eljoe 2018. 12. 12. 10:19
private Boolean bluetoothCheck(){
        boolean chkFlag = false;

        //블루투스를 지원하는 기기이며, 현재 블루투스가 켜져있는가?
        if(mBluetoothService.deviceSupport() && mBluetoothService.connectState()) {
            // API 레벨이 23 미만인 경우(isBluetoothA2dpOn 메소드 사용)
            // isBluetoothA2dpOn : 현재 블루투스 오디오 기능이 연결된 기기가 있는가?
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                if (mAudioManager.isBluetoothA2dpOn()) {
                    chkFlag = true;
                }
            // API 레벨이 23 이상인 경우(getDevices 메소드 사용)
            // getDevices : 현재 연결된 오디오 기기 목록을 가져오는 메소드
            } else {
                devices = mAudioManager.getDevices(AudioManager.GET_DEVICES_ALL);
                // 기기 목록 중, 블루투스에 연결된 오디오 기기가 있는가?
                for (AudioDeviceInfo device : devices) {
                    if (device.getType() == AudioDeviceInfo.TYPE_BLUETOOTH_A2DP) {
                        chkFlag = true;
                    }
                }
            }
        }
    return chkFlag;
}

mBluetoothService 관련 내용은 여기에서 확인할 수 있다.


2019. 01. 09 수정 사항


리팩토링하려고 관련 자료를 찾다보니 BluetoothHeadset과 BluetoothAdapter의 getProfileConnectionState 메소드 중 하나를 선택하면 코드가 훨씬 깔끔해지고 블루투스 헤드셋 체크가 더 정확해진다.


BluetoothAdapter의 getProfileConnectionState

//HEADSET = 오디오와 통화가 가능한 헤드셋
//A2DP = 오디오만 가능한 헤드셋
if(mBluetoothAdapter.getProfileConnectionState(BluetoothProfile.HEADSET) == BluetoothProfile.STATE_CONNECTED
		|| mBluetoothAdapter.getProfileConnectionState(BluetoothProfile.A2DP) == BluetoothProfile.STATE_CONNECTED){
	return true;
}
return false;

BluetoothHeadset과 브로드캐스트 리시버를 이용한 실시간 헤드셋 체크

//ACTION_AUDIO_STATE_CHANGED : 오디오 상태 변경 감지(A2DP)
//ACTION_VENDOR_SPECIFIC_HEADSET_EVENT : 해당 헤드셋의 특정 이벤트(업체별 상태 변화)
private BroadcastReceiver mBluetoothHeadsetBroadCastReceiver = new BroadcastReceiver() {
	@Override
	public void onReceive(Context context, Intent intent) {
		String action = intent.getAction();

		if(action != null){
			if(action.equals(BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED) 
				|| action.equals(BluetoothHeadset.ACTION_VENDOR_SPECIFIC_HEADSET_EVENT)){
				//연결이 확인되면 수행할 로직
			}
		}
	}
};