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

Android Studio应用获取用户位置:实现Google Maps选点并保存经纬度

实现Google Maps位置选择并保存经纬度的方案

方案一:唤起Google Maps应用选点(轻量快速)

无需集成SDK,直接调用系统Intent唤起Google Maps完成选点,适合快速实现需求。

  1. 添加基础权限
    在AndroidManifest.xml中添加网络权限,保证地图正常加载:
<uses-permission android:name="android.permission.INTERNET" />
  1. 触发选点Intent
    在Activity的按钮点击事件中,发起唤起Google Maps的请求:
// 自定义请求码,用于后续结果判断
private const val REQUEST_PICK_LOCATION = 100

fun pickLocationFromMap() {
    val intent = Intent(Intent.ACTION_VIEW).apply {
        data = Uri.parse("geo:0,0?q=Select Location")
        // 指定仅用Google Maps打开,避免其他地图应用干扰
        setPackage("com.google.android.apps.maps")
    }
    // 用Activity Result API替代旧的startActivityForResult
    pickLocationLauncher.launch(intent)
}

// 注册结果回调
private val pickLocationLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        result.data?.data?.let { uri ->
            // 解析返回的Uri,格式为geo:纬度,经度
            val geoParams = uri.toString().split(":")[1].split(",")
            val latitude = geoParams[0].toDouble()
            val longitude = geoParams[1].toDouble()
            // 执行你的保存逻辑,比如存入SharedPreferences或数据库
            saveSelectedLocation(latitude, longitude)
        }
    }
}

方案二:集成Google Maps SDK(应用内选点,体验连贯)

如果需要用户在你的应用内直接操作地图选点,可集成官方SDK实现:

  1. 配置SDK依赖
    在模块级build.gradle中添加依赖:
dependencies {
    implementation 'com.google.android.gms:play-services-maps:18.1.0'
}
  1. 布局中添加地图Fragment
    在Activity布局文件里嵌入地图组件:
<fragment
    android:id="@+id/map_fragment"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  1. 初始化地图并监听点击事件
    在Activity中完成地图初始化,监听用户的地图点击动作:
class MapSelectActivity : AppCompatActivity(), OnMapReadyCallback {
    private lateinit var googleMap: GoogleMap

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_map_select)
        // 初始化地图
        val mapFragment = supportFragmentManager.findFragmentById(R.id.map_fragment) as SupportMapFragment
        mapFragment.getMapAsync(this)
    }

    override fun onMapReady(map: GoogleMap) {
        googleMap = map
        // 设置地图点击监听,获取用户点击的经纬度
        googleMap.setOnMapClickListener { latLng ->
            val latitude = latLng.latitude
            val longitude = latLng.longitude
            // 弹出确认对话框,确认后保存位置
            AlertDialog.Builder(this)
                .setTitle("确认选择位置")
                .setMessage("纬度: ${String.format("%.6f", latitude)}\n经度: ${String.format("%.6f", longitude)}")
                .setPositiveButton("保存") { _, _ ->
                    saveSelectedLocation(latitude, longitude)
                    finish()
                }
                .setNegativeButton("取消", null)
                .show()
        }
    }

    private fun saveSelectedLocation(lat: Double, lng: Double) {
        // 示例:存入SharedPreferences
        val prefs = getSharedPreferences("AppLocation", MODE_PRIVATE)
        prefs.edit()
            .putFloat("selected_lat", lat.toFloat())
            .putFloat("selected_lng", lng.toFloat())
            .apply()
    }
}
  1. 配置API密钥
    需在Google Cloud Console申请Maps API密钥,并在AndroidManifest.xml中添加:
<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="你的API密钥" />

内容的提问来源于stack exchange,提问作者Aharon Gross

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:47:17