Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with checkPermission) or explicitly handle a potential SecurityException
: 아래 함수의 BluetoothAdapter.getBondedDevices() 함수사용시 붉은색 줄의 경고창이 나올 경우
디버깅입니다.
Activity()에 있을 경우와 다른 컴포넌트(Service,...)에 있을 경우 해결책은 2가지가 있습니다.
문구를 읽어서 해결 하실수 있으면 굿 입니다.
==> 붉은색 줄의 내용은 아래와 같습니다.
▶ Activity 에 존재하는 함수라면 checkSelfPermission() 이후 requestPermissions() 를 추가하면 경고가 사라집니다.
fun getBondedDevices(){
if ((ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED)
|| (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED)) {
requestPermissions(
arrayOf(
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_ADVERTISE,
Manifest.permission.BLUETOOTH_CONNECT
),
1
)
return
}
val devices: Set<BluetoothDevice>? = btAdapter?.bondedDevices
devices!!.forEach {
Log.d(BluetoohtLeService.TAG, "bonded device name = ${it.name}, address = ${it.address}")
}
}
▶ Activity 이외에 있는 함수라면 try...catch() 구문을 사용해 SecurityException 을 추가해 줍니다.
fun getBondedDevices(){
val devices :Set<BluetoothDevice>? = btAdapter?.bondedDevices
devices!!.forEach {
Log.d(TAG,"bonded device name = ${it.name}, address = ${it.address}")
}
}
==> try {} catch() 추가
fun getBondedDevices(){
try {
val devices: Set<BluetoothDevice>? = btAdapter?.bondedDevices
devices!!.forEach {
Log.d(TAG, "bonded device name = ${it.name}, address = ${it.address}")
}
}catch(e:SecurityException){
}
}
그럼 수고하세요.
반응형
'Android_app' 카테고리의 다른 글
[Android app] startActivityForResult () 사용 및 대체하기 (0) | 2023.04.04 |
---|---|
[Android App] BroadcastReceiver 간단히 사용해 보기 (0) | 2023.04.04 |
[Android app] bindService() 분석 (0) | 2023.04.03 |
[Android App] 모듈 build.gradle 을 .kts 로 변경하기 (0) | 2023.03.24 |
[JETPACK Compose] Row() 함수 (0) | 2022.11.22 |