본문 바로가기

Android/Function

[안드로이드] 권한 확인/허가 요청 코드 + 블루투스 확인/요청

728x90
반응형
  • 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
반응형