You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求提供Android Kotlin获取当前位置详情及FusedLocationProviderClient示例代码

使用FusedLocationProviderClient获取当前位置详情(Android Kotlin)

1. 配置权限

首先在AndroidManifest.xml中添加必要的位置权限:

<!-- 精确位置权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 粗略位置权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 若需后台定位,添加此权限(Android 10+) -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

2. Kotlin代码实现

以下是完整的Activity示例,包含权限检查、位置获取逻辑:

import android.Manifest
import android.content.pm.PackageManager
import android.location.Location
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import com.google.android.gms.location.FusedLocationProviderClient
import com.google.android.gms.location.LocationServices
import com.google.android.gms.tasks.Task

class LocationActivity : AppCompatActivity() {
    private lateinit var fusedLocationClient: FusedLocationProviderClient
    private val LOCATION_PERMISSION_REQUEST_CODE = 1001

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_location)

        // 初始化FusedLocationProviderClient
        fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)

        // 检查权限并获取位置
        checkLocationPermissionAndFetchLocation()
    }

    private fun checkLocationPermissionAndFetchLocation() {
        when {
            ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.ACCESS_FINE_LOCATION
            ) == PackageManager.PERMISSION_GRANTED -> {
                // 权限已授予,获取当前位置
                fetchCurrentLocation()
            }
            else -> {
                // 请求权限
                ActivityCompat.requestPermissions(
                    this,
                    arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
                    LOCATION_PERMISSION_REQUEST_CODE
                )
            }
        }
    }

    private fun fetchCurrentLocation() {
        val locationTask: Task<Location> = fusedLocationClient.lastLocation

        locationTask.addOnSuccessListener { location: Location? ->
            location?.let {
                // 获取到位置详情
                val latitude = it.latitude
                val longitude = it.longitude
                val accuracy = it.accuracy
                val time = it.time

                // 处理位置数据,比如显示Toast或更新UI
                Toast.makeText(
                    this,
                    "纬度: $latitude, 经度: $longitude, 精度: $accuracy 米",
                    Toast.LENGTH_LONG
                ).show()
            } ?: run {
                // 未获取到位置,可能是设备未开启定位或无位置记录
                Toast.makeText(this, "无法获取当前位置", Toast.LENGTH_SHORT).show()
            }
        }

        locationTask.addOnFailureListener { exception ->
            // 获取位置失败,处理异常
            Toast.makeText(this, "获取位置失败: ${exception.message}", Toast.LENGTH_SHORT).show()
        }
    }

    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode == LOCATION_PERMISSION_REQUEST_CODE) {
            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 权限被授予,获取位置
                fetchCurrentLocation()
            } else {
                // 权限被拒绝,提示用户
                Toast.makeText(this, "需要位置权限才能获取当前位置", Toast.LENGTH_SHORT).show()
            }
        }
    }
}

关键说明

  • FusedLocationProviderClient是Google Play Services提供的位置服务客户端,相比原生LocationManager更高效、稳定,且支持多种定位数据源融合。
  • lastLocation方法返回设备最近记录的位置,若设备未开启定位或无历史位置记录,会返回null,需提前处理该场景。
  • 如果需要实时持续获取位置更新,可以使用requestLocationUpdates方法,搭配LocationRequest配置更新频率、精度等参数。

内容的提问来源于stack exchange,提问作者Priya R G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 10:00:56