android - MapView 在 Android API 19 中加载,在较新版本中为灰色
问题描述
几天前,我有一个 Android 应用程序突然停止在生产中显示地图图块。相反,地图会显示带有 Google 徽标的灰色屏幕,就好像密钥无效一样。我们最近没有部署应用程序或更改密钥。
我创建了一个新密钥并在 Android Studio 中重建了该应用程序。经过一些调整,地图MapView
在 Android 19 上正确加载。
但是,在模拟器和真机中,地图在以后的版本中仍然是灰色的(例如26、27)。
如果我将应用程序的 MainActivity 替换为MapFragment
Maps 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,使缓存失效并重新启动、擦除和重新安装了模拟器设备——一致的行为。
解决方案
似乎问题在于生命周期事件处理。来自“MapVew”的描述:
此类的用户必须将所有生命周期方法从
Activity
或Fragment
包含此视图转发到此类中的相应方法。特别是,您必须转发以下方法:onCreate(Bundle) onStart() onResume() onPause() onStop() onDestroy() onSaveInstanceState() onLowMemory()
必须使用 获取 GoogleMap
getMapAsync(OnMapReadyCallback)
。MapView
自动初始化地图系统和视图。
您必须在布局的每个对应方法中调用等mMapView.onCreate(bundle)
。mMapView.onStart()
Activity
Fragment
MapView
推荐阅读
- java - 如果发生异常,如何在 Executor 服务中停止 Callable 任务
- python - 使用 ElementTree 提取所有文本,而不考虑标签
- sql - 是否在 FROM 子句中子查询的结果集的选择中使用了表索引?
- c# - 将 fody weavers 应用于整个解决方案
- android - Activity 中存在泄漏,但代码的哪一部分引用了 Activity?它可以从 Android-Profiler 检测到吗?
- amazon-web-services - AWS CLI powershell 命令失败,并出现“期望用双引号括起来的属性名称:第 1 行第 6 列(字符 5)”
- gradle - 在 build.gradle 中找不到方法 kaptKotlin
- php - 403 Forbidden 您无权访问此资源
- asp.net - Web 应用程序中的权限 - System.Management,一般故障
- c# - 带有 MongoDb 的 ASP.NET Core 3.1 中的身份服务器 4