안드로이드 (저전력 bl) 말고 classic bl 연결 및 데이터 전송방법 등을 알아봅시다.
//manifest.xml
//bl 권한 설정
<!--bluetooth-->
<uses-permission
android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission
android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"
android:maxSdkVersion="30" />
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"
android:maxSdkVersion="30" />
<uses-permission
android:name="android.permission.ACCESS_BACKGROUND_LOCATION"
android:maxSdkVersion="30" />
//로케이션 권한은 블루투스로 실제위치를 파싱하느냐 아니냐에 따라 권한요구가 달라질것 같습니다.
<uses-permission
android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-feature
android:name="android.hardware.bluetooth"
android:required="true" />
//.kt
//runtime 권한 요청
//버전 12 미만 블루투스 권한 체크
private val requestBlPermissionsBeforeS =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
//granted
} else {
//deny
}
}
//버전 12 미만 위치권한 체크
private val requestLocationPermission =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
permissions
}
//버전 12 이상 블루투스 권한 체크
private val requestBlPermissionsAfterS =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->}
private fun requestBluetoothPermission() {
//버전 12 이상
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
requestBlPermissionsAfterS.launch(
arrayOf(
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT )
)
} else {
//버전 12 미만
val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
requestBlPermissionsBeforeS.launch(enableBtIntent)
requestLocationPermission.launch(
arrayOf(
Manifest.permission.ACCESS_COARSE_LOCATION,
//이 아래 부분은 필요 없을지도?
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.BLUETOOTH,
)
)
}
}