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

如何在已创建主Activity的Android Studio项目中添加地图Activity

给现有Android项目添加地图功能的方法

直接创建项目时选Map Activity是快捷方式,但给现有项目加地图功能也很简单,按以下步骤操作:

1. 配置Google Maps API密钥

  • 前往Google Cloud Console生成API密钥,并启用Maps SDK for Android服务
  • 在项目的AndroidManifest.xml中添加密钥配置:
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="你的API密钥"/>
    
  • 同时在Manifest里添加必要权限:
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    

2. 添加Maps SDK依赖

打开Module级别的build.gradle文件(通常是app/build.gradle),在dependencies块中添加依赖:

implementation 'com.google.android.gms:play-services-maps:18.2.0'

点击Sync Now同步Gradle配置。

3. 在布局中添加地图组件

可以选择两种方式将地图嵌入现有Activity:

方式一:使用SupportMapFragment(推荐)

修改你的Activity布局文件(比如activity_main.xml),添加Fragment标签:

<fragment
    android:id="@+id/map_fragment"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

方式二:使用MapView

如果需要更灵活的生命周期控制,可添加MapView:

<com.google.android.gms.maps.MapView
    android:id="@+id/map_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

4. 在Activity中初始化地图

根据你选择的组件,编写对应的初始化代码:

针对SupportMapFragment的代码

class MainActivity : AppCompatActivity(), OnMapReadyCallback {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        // 获取MapFragment并注册回调
        val mapFragment = supportFragmentManager.findFragmentById(R.id.map_fragment) as SupportMapFragment
        mapFragment.getMapAsync(this)
    }

    override fun onMapReady(googleMap: GoogleMap) {
        // 地图就绪后执行操作,比如设置初始位置
        val initialLocation = LatLng(37.7749, -122.4194) // 示例坐标:旧金山
        googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(initialLocation, 12f))
    }
}

针对MapView的代码

MapView需要手动处理生命周期方法:

class MainActivity : AppCompatActivity(), OnMapReadyCallback {
    private lateinit var mapView: MapView
    private val MAP_VIEW_BUNDLE_KEY = "MapViewBundleKey"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        mapView = findViewById(R.id.map_view)
        var mapViewBundle: Bundle? = savedInstanceState?.getBundle(MAP_VIEW_BUNDLE_KEY)
        mapView.onCreate(mapViewBundle)
        mapView.getMapAsync(this)
    }

    override fun onMapReady(googleMap: GoogleMap) {
        // 地图就绪后的自定义操作
    }

    // 必须重写的生命周期方法
    override fun onResume() {
        super.onResume()
        mapView.onResume()
    }

    override fun onPause() {
        super.onPause()
        mapView.onPause()
    }

    override fun onDestroy() {
        super.onDestroy()
        mapView.onDestroy()
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        var mapViewBundle = outState.getBundle(MAP_VIEW_BUNDLE_KEY) ?: Bundle()
        mapView.onSaveInstanceState(mapViewBundle)
        outState.putBundle(MAP_VIEW_BUNDLE_KEY, mapViewBundle)
    }

    override fun onLowMemory() {
        super.onLowMemory()
        mapView.onLowMemory()
    }
}

5. 测试运行

确保你的测试设备或模拟器已安装Google Play服务,运行项目后就能看到加载完成的地图了。

内容的提问来源于stack exchange,提问作者Chaitanya Gorule

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:01:10