안드로이드 10(29) 블루투스 연결 대응
문제점
bluetoothAdapter.startDiscovery() return false !!!
true로 반환 되어야 하는데 false 로 반환 되어 블루투스 검색을 할 수 없음
안드로이드 10 버전에서 위치 관련 보안이 강화 되었는데 블루투스 검색 할때 위치 관련 퍼미션이 필요하기 때문에 일어난 퍼미션 관련 이슈였습니다.
버전 별로 블루투스 검색 및 연결 관련 퍼미션을 알아보겠습니다.
기본적으로 블루투스 기능 ON , 위치 기능 ON 상태 여야 합니다.
블루투스 기능 OFF 상태일 때는 사용 가능 하게 팝업 띄어 주고 위치 기능 OFF 상태일때는 체크 해서 설정 화면으로 보내면됩니다.
targetSdkVersion 29 미만인 경우
AndroidManifest.xml 파일
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
29 미만인 경우 위치 관련 퍼미션이 적용 되어 있을 경우 아래 퍼미션이 자동으로 추가 됩니다.
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
아래 퍼미션은 런타임 퍼미션 적용
Manifest.permission.ACCESS_COARSE_LOCATION
targetSdkVersion 29 인 경우
AndroidManifest.xml 파일
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
아래 퍼미션은 런타임 퍼미션 적용
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION
퍼미션 승인 후 bluetoothAdapter. startDiscovery() 이 true로 반환되는걸 확인 할 수 있었습니다.
아래 이미지는 블루투스 연결 버튼 클릭 시 플로우 차트