首页 > 解决方案 > MapView 在 Android API 19 中加载,在较新版本中为灰色

问题描述

几天前,我有一个 Android 应用程序突然停止在生产中显示地图图块。相反,地图会显示带有 Google 徽标的灰色屏幕,就好像密钥无效一样。我们最近没有部署应用程序或更改密钥。

我创建了一个新密钥并在 Android Studio 中重建了该应用程序。经过一些调整,地图MapView在 Android 19 上正确加载。

但是,在模拟器和真机中,地图在以后的版本中仍然是灰色的(例如26、27)。

如果我将应用程序的 MainActivity 替换为MapFragmentMaps docs中的示例,则地图会加载并在所有平台上进行交互。如果我然后切换回MapView并重新构建应用程序,地图将显示由 加载的任何图块MapFragment- 但在平移和缩放时不会加载任何其他内容。没有明显的 logcat 错误。

我已经升级到最新的播放服务('com.google.android.gms:play-services-base:16.1.0', 'com.google.android.gms:play-services-location:16.0.0'),更新了 gradle,使缓存失效并重新启动、擦除和重新安装了模拟器设备——一致的行为。

左侧屏幕截图显示了没有地图的 Android API 27; 右侧显示正确加载地图的 Android API 19

标签: androidgoogle-maps

解决方案


似乎问题在于生命周期事件处理。来自“MapVew”的描述

此类的用户必须将所有生命周期方法从 ActivityFragment包含此视图转发到此类中的相应方法。特别是,您必须转发以下方法:

onCreate(Bundle)
onStart()
onResume()
onPause()
onStop()
onDestroy()
onSaveInstanceState()
onLowMemory()

必须使用 获取 GoogleMap getMapAsync(OnMapReadyCallback)MapView自动初始化地图系统和视图。

您必须在布局的每个对应方法中调用等mMapView.onCreate(bundle)mMapView.onStart()ActivityFragmentMapView


推荐阅读