@awenn2015
Веб-программист самоучка

Почему студия не видит проверку разрешений?

Я новичок в разработке под андроид, в основном помогают подсказки студии, например когда для работы с bluetooth нужно докинуть разрешений, был такой код например

private fun isBelowMarshmallow(): Boolean {
    return Build.VERSION.SDK_INT < Build.VERSION_CODES.M
}

private fun checkScanPermission(): Boolean {
    var result = true

    if (isBelowMarshmallow()) return true

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
      val scanPermission = Manifest.permission.BLUETOOTH_SCAN

      if (checkPermission(scanPermission) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(ctx,
          arrayOf(scanPermission),
          MainActivity.REQUEST_BLUETOOTH_SCAN)
        result = false
      }
    }

    return result
  }


сам по себе этот код (если его закинуть в класс активности и использовать где то) прекрасно работает, но я решил как то декомпозировать код и вынести все проверки разрешений в отдельный класс и просто создавать объект на его основе с передачей контекста активности, код будет ниже, но суть проблемы в том что в таком случае студия не понимает что я проверяю разрешение и подсвечивает красным соответствующие места в коде и это немного раздражает, проверку же делаю по факту

class PermissionManager(private var ctx: Activity) {
  public fun isBelowMarshmallow(): Boolean {
    return Build.VERSION.SDK_INT < Build.VERSION_CODES.M
  }

  public fun checkPermission(permission: String): Int {
    return ActivityCompat.checkSelfPermission(ctx, permission)
  }

  public fun checkConnection(): Boolean {
    var result = true

    if (isBelowMarshmallow()) return true

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
      if (checkPermission(Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(ctx,
          arrayOf(Manifest.permission.BLUETOOTH_CONNECT),
          MainActivity.REQUEST_CONNECT_BT)
        result = false
      }
    }

    return result
  }

  public fun checkScan(): Boolean {
    var result = true

    if (isBelowMarshmallow()) return true

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
      val scanPermission = Manifest.permission.BLUETOOTH_SCAN

      if (checkPermission(scanPermission) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(ctx,
          arrayOf(scanPermission),
          MainActivity.REQUEST_BLUETOOTH_SCAN)
        result = false
      }
    }

    return result
  }
}
  • Вопрос задан
  • 124 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы