728x90
반응형
SMALL
- Permission 확인
companion object{
// used to identify adding bluetooth names
const val REQUEST_ENABLE_BT = 1
// used to request fine location permission
const val REQUEST_ALL_PERMISSION = 2
val PERMISSIONS = arrayOf(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
)
}
PERMISSIONS array안에 요청할 권한을 넣어줍니다.
// check if location permission
if (!hasPermissions(this, PERMISSIONS)) {
requestPermissions(PERMISSIONS, REQUEST_ALL_PERMISSION)
}
onCreate안에 위 코드를 위치시켜 권한을 승인했는지 확인합니다.
만약에 권한이 승인되어있지 않다면, 요청합니다.
필요한 메서드는 아래와 같습니다.
Android12 이상에서 Bluetooth Permission 요청이 변경되었으니 꼭 확인 해보세요.
[Android] - [안드로이드] 안드로이드 12 블루투스 퍼미션 대응하기 ― API 별 블루투스 권한 대응
- Permission 요청
private fun hasPermissions(context: Context?, permissions: Array<String>): Boolean {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
for (permission in permissions) {
if (ActivityCompat.checkSelfPermission(context, permission)
!= PackageManager.PERMISSION_GRANTED
) {
return false
}
}
}
return true
}
// Permission check
@RequiresApi(Build.VERSION_CODES.M)
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String?>,
grantResults: IntArray
) {
when (requestCode) {
REQUEST_ALL_PERMISSION -> {
// If request is cancelled, the result arrays are empty.
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Permissions granted!", Toast.LENGTH_SHORT).show()
} else {
requestPermissions(permissions, REQUEST_ALL_PERMISSION)
Toast.makeText(this, "Permissions must be granted", Toast.LENGTH_SHORT).show()
}
}
}
}
- Bluetooth 요청
/**
* Request BLE enable
*/
private val requestEnableBleResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
if (result.resultCode == Activity.RESULT_OK) {
Toast.makeText(this,"Bluetooth기능을 허용하였습니다.", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this,"Bluetooth기능을 켜주세요.", Toast.LENGTH_SHORT).show()
}
requestEnableBluetooth = false
}
private fun requestEnableBLE() {
val bleEnableIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
requestEnableBleResult.launch(bleEnableIntent)
}
블루투스가 ON되어 있지 않으면, 위 메서드를통해 블루투스를 ON합니다.
- 블루투스 enable 확인/요청
// check ble adapter and ble enabled
val bleManager: BluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
val bleAdapter: BluetoothAdapter? = bleManager.adapter
if (bleAdapter == null || !bleAdapter.isEnabled) {
requestEnableBluetooth = true
requestEnableBLE()
}
다음 코드처럼 블루투스를 지원하지 않는 기기인지 구분하고, 앱을 종료할 수도 있습니다.
override fun onResume() {
super.onResume()
// finish app if the BLE is not supported
if (!packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
finish()
}
}
728x90
반응형
LIST
'Android > Function' 카테고리의 다른 글
[안드로이드 Kotlin] 카운트 다운 타이머(CountdownTimer) 간단 사용하기 (0) | 2020.12.08 |
---|---|
ScrollView 안에 있는 자식 뷰에서 독단적으로 scroll 해야 할 때 (0) | 2020.11.23 |
[안드로이드] 외부저장소(SAF) ↔ 내부저장소 파일 옮기기/복사하기 (1) | 2020.09.04 |
[안드로이드] 특정 확장자의 파일 목록 불러와서 최신순, 이름순 정렬 하기 (0) | 2020.09.03 |