Язык Котлин, яндекс карты андроид студия отслеживание текущего местоположения с помощью LocationService
kotlin
implementation 'com.yandex.android:maps:3.2.0'
2. Добавление разрешений в манифест файл:
xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
3. Создание сервиса LocationService:
kotlin
class LocationService(private val context: Context) : Service(), LocationListener {
private var locationManager: LocationManager? = null
private var location: Location? = null
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager?
val criteria = Criteria()
criteria.accuracy = Criteria.ACCURACY_FINE
val provider = locationManager?.getBestProvider(criteria, true)
provider?.let { locationManager?.requestLocationUpdates(it, 1000L, 0f, this) }
return START_STICKY
}
override fun onBind(intent: Intent?): IBinder? {
return null
}
override fun onLocationChanged(location: Location?) {
location?.let {
this.location = it
}
}
override fun onProviderDisabled(provider: String?) {}
override fun onProviderEnabled(provider: String?) {}
override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {}
fun getLastKnownLocation(): Location? {
if (location == null) {
location = locationManager?.getLastKnownLocation(LocationManager.GPS_PROVIDER)
}
return location
}
}
4. Добавление разрешений в классе активности:
kotlin
private val permissions = arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
private fun checkPermissions() {
val permissionsToRequest = ArrayList<String>()
for (permission in permissions) {
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
permissionsToRequest.add(permission)
}
}
if (permissionsToRequest.isNotEmpty()) {
ActivityCompat.requestPermissions(this, permissionsToRequest.toTypedArray(), REQUEST_CODE_PERMISSIONS)
} else {
startLocationService()
}
}
5. Обработка результатов запроса разрешений:
kotlin
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == REQUEST_CODE_PERMISSIONS && grantResults.isNotEmpty()) {
for (i in grantResults.indices) {
if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
// Разрешение не было предоставлено пользователем
return
}
}
startLocationService()
}
}
6. Запуск сервиса:
kotlin
private fun startLocationService() {
val serviceIntent = Intent(this, LocationService::class.java)
startService(serviceIntent)
}
7. Получение последнего известного местоположения:
kotlin
val locationService = LocationService(this)
val lastKnownLocation = locationService.getLastKnownLocation()
if (lastKnownLocation != null) {
val latitude = lastKnownLocation.latitude
val longitude = lastKnownLocation.longitude
// Используйте полученные координаты
}
Примечание: Данный код отслеживает местоположение пользователя с помощью GPS провайдера. Чтобы использовать другие провайдеры (например, сеть), можно изменить `LocationManager.GPS_PROVIDER` в методе `getLastKnownLocation()` на другой провайдер (например, `LocationManager.NETWORK_PROVIDER`).Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет