본문으로 바로가기

[Android App] Build Warning: Call requires permissions ....

category Android_app 2023. 4. 3. 20:25

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){
            
        }
    }

붉은줄의 경고

 

 

그럼 수고하세요.

반응형