Как настроить местоположение в простом классе, который не является Activity - PullRequest
0 голосов
/ 24 сентября 2019

Я использую FusedLocationProviderClient, чтобы получить местоположение пользователя из простого класса, который не является деятельностью.Как я могу это сделать?Я не хочу получать местоположение из класса деятельности, просто из простого класса.Является ли это возможным?Пример ниже

class GetUserLocation {
    private lateinit var fusedLocationClient: FusedLocationProviderClient

    suspend fun getLastLocation(): Map<String, Double> {
        fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
        val location = fusedLocationClient.lastLocation.await()
        return mapOf(
            "lat" to location.latitude,
            "lng" to location.longitude
        )
    }
}

Как я могу получить this в следующем фрагменте, если я не в классе активности, поскольку следующий фрагмент требует действия, this относится только к классу GetUserLocationотсюда ошибка

fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)

1 Ответ

0 голосов
/ 24 сентября 2019

все, что вам нужно, чтобы передать контекст в любое место, где вы хотите получить текущее местоположение с устройства.

создайте модуль приложения, который предоставляет контекст

@Module
class ApplicationModule(var app: App) {


    @Provides
    @Singleton
    fun provideApp(): App = app

    @Provides
    @Singleton
    fun provideContext(): Context = app.applicationContext
}

и создайте компонент

@Singleton
@Component(modules = arrayOf(ApplicationModule::class))
interface ApplicationComponent {

    fun context(): Context

}

и, наконец, вы должны создать экземпляр компонента

val component by lazy {
        DaggerApplicationComponent.builder()
                .applicationModule(ApplicationModule(this))
                .build()
    }


class LocationUtils(app: Application) {

    @Inject
    lateinit var context: Context

     init {
        (app as? App)?.component?.inject(this)
      }
      fusedLocationClient = LocationServices.getFusedLocationProviderClient(context)

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...