Ответ
Да, приходилось. Например, писал модуль для работы с геолокацией, который включал:
- Получение координат через FusedLocationProvider
- Обработку пермишенов (включая runtime-запросы)
- Кеширование последней локации
- Кастомные callback’и для UI
class LocationModule(private val context: Context) {
private val fusedLocationClient = LocationServices.getFusedLocationProviderClient(context)
fun getLastLocation(callback: (Location?) -> Unit) {
if (checkPermissions()) {
fusedLocationClient.lastLocation.addOnSuccessListener { location ->
callback(location)
}
} else callback(null)
}
private fun checkPermissions(): Boolean {
return ContextCompat.checkSelfPermission(
context,
Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED
}
}
Учитывал edge cases: отказ в разрешениях, выключенный GPS, обработку ошибок. Модуль изолировал логику от UI-слоя.