Android Studio应用获取用户位置:实现Google Maps选点并保存经纬度
实现Google Maps位置选择并保存经纬度的方案
方案一:唤起Google Maps应用选点(轻量快速)
无需集成SDK,直接调用系统Intent唤起Google Maps完成选点,适合快速实现需求。
- 添加基础权限
在AndroidManifest.xml中添加网络权限,保证地图正常加载:
<uses-permission android:name="android.permission.INTERNET" />
- 触发选点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实现:
- 配置SDK依赖
在模块级build.gradle中添加依赖:
dependencies { implementation 'com.google.android.gms:play-services-maps:18.1.0' }
- 布局中添加地图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" />
- 初始化地图并监听点击事件
在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() } }
- 配置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
相关产品推荐
相关产品推荐

