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
相关产品推荐
相关产品推荐

