Я новичок в разработке под андроид, в основном помогают подсказки студии, например когда для работы с 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
}
}