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

Android模拟器中Google Map仅显示Logo无法加载地图问题求助

解决Map Activity仅显示Google Logo无地图内容的问题

咱们先从你给出的代码入手,一眼就发现MapsActivity的代码是不完整的——onMapReady方法写到一半就断了,这直接会导致后续的地图加载逻辑跑不起来,先把这个坑填上再说!接下来咱们一步步排查所有可能的原因:

1. 补全截断的代码,保证逻辑完整

你提供的onMapReady最后一行是:

locationManager=getApplicationContext().getSystemService(Context

这明显没写完,完整的onMapReady应该包含LocationManager的初始化、LocationListener的实现,还有权限检查的逻辑,我给你补全一份可运行的版本:

override fun onMapReady(googleMap: GoogleMap) {
    mMap = googleMap
    // 初始化LocationManager
    locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
    // 实现LocationListener监听位置变化
    locationListener = object : LocationListener {
        override fun onLocationChanged(location: Location) {
            // 位置变化时更新地图
            updateMap(location)
        }

        override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {}
        override fun onProviderEnabled(provider: String) {}
        override fun onProviderDisabled(provider: String) {}
    }

    // Android 6.0+动态权限检查
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // 申请定位权限
            ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION), 1)
        } else {
            // 已有权限,直接请求位置更新
            locationManager?.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0f, locationListener)
            // 获取最后已知位置,更新地图
            val lastKnownLocation = locationManager?.getLastKnownLocation(LocationManager.GPS_PROVIDER)
            lastKnownLocation?.let { updateMap(it) }
        }
    } else {
        // 6.0以下直接请求位置
        locationManager?.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0f, locationListener)
        val lastKnownLocation = locationManager?.getLastKnownLocation(LocationManager.GPS_PROVIDER)
        lastKnownLocation?.let { updateMap(it) }
    }

    // 可选:设置地图默认显示的区域,避免暂时获取不到位置时空白
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(LatLng(39.9042, 116.4074), 12f))
}

代码不完整是最直接的问题,先把这部分补好,再看其他可能。

2. 确认API Key的有效性(重中之重)

虽然你在Manifest里配置了com.google.android.geo.API_KEY,但很多时候地图加载失败都是API Key的问题:

  • 去Google Cloud控制台确认Maps SDK for Android服务是否已经为这个API Key启用
  • 检查API Key的限制规则:包名和SHA-1签名是否和你的应用完全匹配(debug和release版本的SHA-1要分别配置)
  • 如果API Key没有设置正确的限制,或者服务没启用,地图就只会显示Google Logo,加载不出瓦片

3. 完善权限与位置服务逻辑

  • 你已经添加了ACCESS_FINE_LOCATION和INTERNET权限,但要确保动态权限请求的逻辑正确——上面补全的代码已经覆盖了这部分,但要注意用户拒绝权限后的处理(比如提示用户开启权限)
  • 确认设备的Google Play服务是最新版本:旧版本的Play服务可能不兼容新版Maps SDK,导致地图加载失败
  • 注意getLastKnownLocation可能返回null(比如设备第一次定位),这时候要依赖onLocationChanged回调获取位置,所以默认给地图设置一个中心点很有必要

4. 基础地图配置

在onMapReady里可以加几个基础配置,确保地图能正常显示:

// 启用我的位置图层(需要权限)
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
    mMap.isMyLocationEnabled = true
}
// 设置地图类型为普通地图
mMap.mapType = GoogleMap.MAP_TYPE_NORMAL

5. 网络环境检查

虽然你说已经连了网络,但要确认设备能正常访问Google的地图服务,同时检查应用有没有被防火墙或代理拦截网络请求。

按照上面的步骤逐一排查,先补全代码,再验证API Key,应该就能解决地图不显示的问题了!

内容的提问来源于stack exchange,提问作者Abdus Samad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:32:00