Maps Android API 高级计划的版本说明

2018 年 12 月 20 日

解决的问题

  • 又解决了一个应用在尝试加载地图时崩溃的问题(问题 120507393)。您应该使用此版本(2.34.2 版),而不是 11 月 22 日发布的版本(2.34.1 版)或 11 月 1 日发布的版本(2.34.0 版)。

备注

  • 在此版本中,仍然需要下述适用于 11 月 22 日发布版本的新依赖项和更新后的 compileSdkVersion

2018 年 11 月 22 日

解决的问题

  • 解决了应用在尝试加载地图时崩溃的问题(问题 119727875)。您应该使用此版本(2.34.1 版),而不是 11 月 1 日发布的版本(2.34.0 版)。

备注

  • 新依赖项:您需要将以下新依赖项添加到应用的 build.gradle 文件:

    implementation 'com.android.support:support-v4:+'
    implementation 'com.android.support:appcompat-v7:+'
    implementation 'com.google.android.gms:play-services-basement:15.0.1'
    implementation 'com.google.android.gms:play-services-base:15.0.1'
    
  • 您还应在应用的 build.gradle 中将 compileSdkVersion 设置为最新版本(目前为 28)。

如需查看完整的配置说明,请参阅入门指南

2018 年 11 月 1 日

特点

  • 添加了 UiSettings.setScrollGesturesEnabledDuringRotateOrZoom(boolean)UiSettings.isScrollGesturesEnabledDuringRotateOrZoom() 方法,让您可以设置相应偏好,指定用户在使用滚动手势时,能否同时使用缩放或旋转手势。如果启用,用户可以在旋转或缩放地图的同时滚动地图。如果停用,用户通过手势旋转或缩放地图时无法滚动地图。这个设置不会完全停用滚动手势,只会在用户使用旋转和缩放手势时将其停用,也不会限制相机的程序化移动和动画形式。

解决的问题

  • 解决了在查看室内有较多建筑物的区域时发生的 StackOverflowError。(问题 35829548
  • 解决了在应用指定图标饱和度的自定义样式时地图注点图标被隐藏的错误。(问题 65660536

移除了旧样式 - 2018 年 11 月 1 日

特点

  • 移除了对旧基本地图样式的支持。不再支持通过 AndroidManifest.xml 启用和停用 API 的选项(参见下文)。这一点适用于所有版本的 Maps SDK for Android。如需详细了解新样式,请参阅此博文

默认启用新样式 - 2018 年 6 月 14 日

特点

  • 默认启用新的基本地图样式。如果您需要时间来修改应用以适应新样式,您仍然可以暂时将其停用。如果您停用新样式,请跟进问题 72780606,其中指出了对旧基本地图样式终止支持的日期。如有最新消息,我们会在那里发布。

    如需停用新样式,请将以下标记添加到 AndroidManifest.xml 文件中的 <application> 标记内。设备必须安装 12.0.0 版或以上版本的 Google Play 服务才能停用新样式。如果您之前启用了新的基本地图样式,应该用此停用标记替换启用标记。如需详细了解新样式,请参阅此博文

    <meta-data android:name="com.google.android.m4b.maps.API_OPTIONS"
        android:value="B3H9HE845CFHYG"/>
    

启用新样式 - 2018 年 4 月 12 日

特点

  • 用于启用新基本地图样式的选项已启用。如需启用新样式,请将以下标记添加到 AndroidManifest.xml 文件中的 <application> 标记内。设备必须安装 12.0.0 版或以上版本的 Google Play 服务才能启用新样式。如需详细了解新样式,请参阅此博文

    <meta-data android:name="com.google.android.m4b.maps.API_OPTIONS"
        android:value="B3MWHUG2MR0DQW"/>
    

2018 年 4 月 12 日

特点

  • 为开发者添加了启用实验性功能的机制。

2018 年 3 月 20 日

特点

  • 现在,您在设置街景全景图片的位置时,可以提供 StreetViewSource 来设置限制,以便搜索结果中仅包含室外全景图片。请注意,此功能是实验性的,有些搜索结果可能仍会包含室内全景图片。如需了解详情,请参阅有关街景的指南。

解决的问题

2017 年 11 月 6 日

特点

  • 此版本添加了对描边图案、连接类型和端点的支持,进而扩展了针对精简模式下多段线以及多边形和圆形轮廓的自定义样式功能,以与完整 API 保持一致。如需查看相关示例,请参阅有关如何添加用于表示区域和路线的多边形和多段线的教程。

2017 年 9 月 18 日

特点

使用新的 GoogleMap.OnMyLocationClickListener 来检测用户何时点击了“我的位置”蓝点。(问题 35822305

@Override
public void onMyLocationClick(@NonNull Location location) {
  Toast.makeText(this, "Current location:\n" + location, Toast.LENGTH_LONG).show();
}

如需了解详情,请参阅有关“我的位置”图层的指南。

2017 年 7 月 28 日

解决的问题

  • 依赖于 firebase-messaginggoogle-maps-sdk-m4b 的项目中出现 DexException: play-services-basement-11.0.2 google-maps-sdk-m4b-2.28.0。(问题 63931524
  • 在多段线选项中应用连接类型 ROUND 时出现 IllegalArgumentException: totalAngleRad must be >= 0.0f and <= 2*PI: -2.9516223E-4。(问题 36777405

2017 年 6 月 7 日

解决的问题

2017 年 2 月 15 日

特点

  • 此版本引入了针对多段线以及多边形和圆形轮廓的自定义样式。将描边图案从实线(默认)更改为虚线、点或间隙,任您选择。在多段线和多边形中,您可以指定棱台连接或圆角连接,以替代默认的固定斜角连接。您还可以将多段线每端的端点从平端(默认)更改为方端或圆端,或者指定一个自定义位图作为端点。描边图案、连接类型和顶端/末端的样式在完整 API 中可用,但在精简模式下不可用。如需查看相关示例,请参阅有关如何添加用于表示区域和路线的多边形和多段线的教程。(问题 463347874884
  • 现在,您可以使用几何图形对象存储任意数据对象。例如,调用 setTag() 将数据对象添加到多段线。类似方法以及标记上现有的 setTag()getTag() 方法适用于多段线、多边形、圆形和地面叠加层。(问题 10306

解决的问题

  • java.lang.IllegalStateException: LruCache does not have a sizeOf implementation for: null问题 8211
  • 缩放或平移地图时发生 OutOfMemoryError。(问题 5621
  • 调用 MapView#onCreate. 时出现 NPE。(问题 10878
  • 在日志中看到 Suppressed StrictMode policy violation(解决了部分问题)。(问题 11077
  • 无法从 google-maps-sdk-m4b aar 中移除 Guava。(问题 10246

2016 年 10 月 24 日

解决的问题

  • 圆圈填充在快速更新半径和圆心时闪烁。(问题 5707
  • 在 Google Play 应用不可用时出现的崩溃问题。(问题 4862
  • onMarkerClick(Marker) 中调用 Marker.showInfoWindow() 并返回 true 导致 Marker.isInfoWindowShown 在后续的标记点击中仍然返回 false。(问题 5408
  • 应用内存占用较大时性能不佳。(问题 5445
  • 日志中显示 StrictMode 违规问题。(问题 10170
  • 构建并安装 m4b 版本时出现警告:Ignoring InnerClasses attribute for an anonymous inner class。(问题 10050

备注

2016 年 9 月 21 日

特点

  • 此版本引入了基本地图的自定义样式(问题 5463)。您可以向 MapStyleOptions 传递 JSON 样式声明,从而更改道路、公园、商家和其他地图注点等地图项的视觉显示效果。这意味着,您可以突出地图的特定组件,或者使地图与应用的样式相辅相成。自定义样式适用于地图类型为 normal 的地图。

  • 利用全新的 Maps Platform 样式设置向导可以快速为您的地图生成 JSON 样式声明。Maps SDK for Android 支持与 Maps JavaScript API 相同的样式声明。

  • 如果地图类型为 normal,商家地图注点 (POI) 现在会默认显示在地图上(在此版本之前,本地 POI 会显示在地图上,但商家 POI 不会)。商家 POI 表示商店、餐馆和酒店之类的商家。请参阅有关地图注点的指南

  • 您可以响应 POI 上的点击事件

解决的问题

  • 收到关于 Google Maps Android API 的警告:GLHudOverlay deprecated; draw(): no-op。(问题 10201
  • 客户端必须具有 ACCESS_FINE_LOCATION 权限才能请求 PRIORITY_HIGH_ACCURACY 位置。(问题 10166
  • Android Nougat 开发者预览版:在多窗口模式下调整大小且未聚焦时,MapView 空白。(问题 213354
  • 构建并安装高级计划 (m4b) 版本时出现警告。(问题 10050

备注

  • 转发生命周期方法:如果您使用的是 MapView 类,并且 API 处于完全互动模式而不是精简模式,您的应用必须将以下 Activity 生命周期方法转发到 MapView 类中的相应方法:onCreate()onStart()onResume()onPause()onStop()onDestroy()onSaveInstanceState()onLowMemory()。在此版本之前,无需转发 onStart()onStop(),但在使用新版本重新编译应用时,也必须转发这两个方法。如需了解详情,请参阅文档

  • 对高级计划 SDK 软件包的改进:

    • 在顶层 README 文件中描述软件包内容。
    • 将顶级目录重命名为 maps_for_business_sdk,这样可以更轻松地手动更新现有库。
    • 针对文档和文件注释进行了多项改进,包括 AndroidManifest.xml 中关于权限的澄清性注释。
    • 更正了 .release-classpath 中的名称 release_m4b.jar
    • .release-classpath 中移除了对不存在的源 jar 的引用。

2016 年 8 月 1 日

特点

  • 此版本针对相机移动开始、持续和结束事件引入了一套新的相机更改监听器。您还可以了解相机移动的原因,是用户手势导致的,还是内置 API 动画或开发者控制的移动导致的。下面是新监听器的摘要信息。如需了解详情,请参阅有关相机更改事件的指南。(问题 4636

    • 当相机开始移动时,系统会调用 OnCameraMoveStartedListeneronCameraMoveStarted() 回调。此回调方法将收到相机移动的 reason
    • 当相机正在移动或用户正与触摸屏互动时,系统将多次调用 OnCameraMoveListeneronCameraMove() 回调。
    • 当相机停止移动且用户已停止与地图互动时,系统将调用 OnCameraIdleListenerOnCameraIdle() 回调。
    • 在当前相机移动已中断时,系统将调用 OnCameraMoveCanceledListenerOnCameraMoveCanceled() 回调。
  • 您可以使用 Marker.setTag() 利用标记存储任意数据对象,并使用 Marker.getTag() 检索数据对象。如需了解详情,请参阅有关将数据与标记关联的指南。(问题 4650

  • 您可以使用 GoogleMap.setMinZoomPreference()GoogleMap.setMaxZoomPreference() 设置首选的最小和/或最大缩放级别。例如,如果您的应用显示地图注点周围的定义区域,或者如果您要将自定义图块叠加层与一组有限的缩放级别搭配使用,此设置就非常有用。如需了解详情,请参阅有关设置最小/最大缩放偏好设置的指南。(问题 4663

  • 您可以使用 GoogleMap.setLatLngBoundsForCameraTarget() 限制地图焦点的纬度/经度中心边界(相机目标),以便用户只能在这些边界内滚动和平移。例如,购物中心或机场的零售应用可能希望将地图限制到特定边界,使用户只能在这些边界内滚动和平移。如需了解详情,请参阅有关将用户的平移操作限定在指定区域的指南。

改进和解决的问题

  • Google Play 服务 9.0.83 的标记图标锚标记出现故障。(问题 9768
  • 卸载/停用 Google 地图时出现 ActivityNotFoundException。(问题 9483

备注

  • OnCameraChangeListener弃用,取而代之的是上述新监听器,即 OnCameraMoveStartedListenerOnCameraMoveListenerOnCameraMoveCanceledListenerOnCameraIdleListener

2016 年 7 月 14 日

  • 此版本没有功能性更改。新库下载文件修复了一个打包错误,该错误会导致在依赖最新版本的 Google Play 服务 SDK 时重复出现文件异常。

2016 年 6 月 29 日

特点

解决的问题

  • NullPointerException:尝试对 null 对象引用调用虚拟方法 boolean java.io.File.mkdir()。(问题 9021
  • NullPointerException:尝试对 com.google.maps.api.android.lib6.d.ei.a() 处的 null 对象引用调用接口方法 java.util.Iterator java.util.List.iterator()。(问题 9008
  • 使用资源 ID 对视图以外的标记调用 Marker.setIcon() 会使标记变为白色。(问题 9765
  • 为 Google 地图标记设置图标有时会导致闪烁。(问题 8531
  • 调用 Marker.setIcon() 会导致信息窗口消失。(问题 5419
  • 如果图标在 onMarkerDragStart 事件中发生变化,标记将停止拖动。(问题 5932
  • 实现自定义 InfoWindowAdapter 后,轻触信息窗口时窗口不再突出显示。(问题 7809
  • 多段线在某些情况下绘制不正确。(问题 5313
  • 绘制多段线时出现奇怪行为。(问题 5123
  • 靠近极点的多段线绘制不正确。(问题 9176
  • 点击路线工具栏按钮时出现 NullPointerException。(问题 8817
  • 可能明确调用 GoogleMap.getProjection().toScreenLocation() 中的 System.gc()。(问题 6483
  • 使用 SupportMapFragment 时,API 会在屏幕旋转时泄漏内存,直到地图按当前的缩放级别完成加载为止。(问题 5905
  • 取消动画时发生 GoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng,zoom)),扰乱缩放。(问题 6947

备注

  • 先前弃用的 getMap() 函数在 SDK 中不再可用(该函数在已经安装到 Android 设备的 Google Play 服务 APK 中仍然可用)。getMap() 函数自 2014 年 12 月起弃用。如果您在从 getMap() 转换为 getMapAsync() 时需要帮助,请参阅此发布博文
  • 弃用通知:在未来的版本中,室内地图仅会在类型为 normal 的地图上显示。从该未来版本开始,satelliteterrainhybrid 地图将不支持室内地图。即使不支持室内地图,isIndoorEnabled() 也将继续返回通过 setIndoorEnabled() 设置的值,与它现在的处理方式相同。默认情况下,setIndoorEnabledtrue。请订阅这些版本说明,以获取每个版本的通知。

2016 年 2 月 11 日

特点

此版本引入了多个新的事件监听器:

解决的问题

  • 点按两次信息窗口后放大到最大级别。(问题 4640
  • Android maps v2 标记信息窗口中的 RTL 文本出现问题。(问题 5608
  • TileProvider 生成的图块正确无误,但在地图上显示为纯白色。(问题 8084
  • 内存泄漏。(问题 8696
  • 启用“我的位置”图层会泄露 Activity。(问题 8111

备注

  • Google Maps Engine 于 2016 年 1 月底停用。因此,我们从 Maps SDK for Android 中移除了 MapsEngineLayer 类。如需了解详情,请参阅 Google Maps Engine 信息页面。

2015 年 11 月 12 日

备注

  • 如果您定位到 8.3 版或更高版本的 Google Play 服务 SDK,则使用 Maps SDK for Android 时不再需要 WRITE_EXTERNAL_STORAGE 权限。如需了解详情,请参阅配置指南
  • GitHub 上现在提供 Maps SDK for Android 的所有代码示例。请注意,示例使用的是 com.google.android.gms.maps 软件包,而不是用于 Google Maps Platform 高级计划的 com.google.android.m4b.maps 软件包。这些示例还需要 Google Play 服务 SDK,因为它们会在演示版应用的某些部分使用地理位置 API。

2015 年 10 月 1 日

特点

  • 现在,Maps SDK for Android 支持穿戴式应用的微光模式。微光模式适用于始终开启的应用,会在用户不再主动使用应用时激活,从而让应用在穿戴式设备上保持可见。Maps SDK for Android 提供了简化的低色度地图渲染。微光模式可以降低应用的功耗,并可确保与表盘等其他微光应用保持一致的界面外观。

备注

  • Android 6.0 (Marshmallow) 引入新的权限处理模型,简化了用户安装和升级应用的过程。如果您的应用以 API 级别 23 或更高级别为目标平台,便可使用这种新权限模型。如果您在 Maps SDK for Android 中使用“我的位置”图层,这一点尤为重要。如需了解详情,请参阅有关“我的位置”图层的文档。

2015 年 6 月 23 日

解决的问题

  • 在 Google Play 服务的版本低于 7.3 的设备上运行时遇到的问题。

2015 年 6 月 2 日

特点

  • Maps SDK for Android 现在可用于 Android Wear。创建直接在穿戴式设备上运行且基于地图的应用。

解决的问题

  • zOrderOnTop 属性设置为 true 或将 MapView 嵌入可滚动容器后,在 MapView 中渲染地图时出现的问题。(问题 7936
  • 地图工具栏在精简模式下始终可见,即使停用也是如此。(问题 7947

2015 年 5 月 5 日

特点

  • 新接口 StreetViewPanorama.OnStreetViewPanoramaLongClickListener 支持长按(点击并按住手指)街景全景图片。
  • 现在,在精简模式下使用 MapView 类时,转发生命周期事件为可选操作,但此文档中介绍的一些情况除外。
  • 若要在精简模式下停用地图上的点击事件,您可以对包含 MapViewMapFragment 的视图调用 setClickable()。例如,在列表视图下显示地图时,如果您想让点击事件调用与地图无关的操作,便可执行以上调用。如需了解详情,请参阅文档

解决的问题

  • 现在,showInfoWindow() 可在精简模式和完整模式下使用。
  • TileOverlay.clearTileCache() 可在返回 NO_TILE 后按预期工作。(问题 4755
  • 在报告精简模式不支持的功能时,API 会慎重选择其在精简模式下的日志记录行为。它不再记录应用启动时执行的默认调用。
  • CameraUpdateFactory 现已正确初始化,因此,在 MapView.getMap() 返回有效的 GoogleMap 后,您应该不会再看到 NullPointerException “CameraUpdateFactory is not initialized”(CameraUpdateFactory 未初始化)。(问题 6499
  • 应用启动性能得到提升,主线程在应用启动时不再处于被阻止状态。(问题 7532
  • StreetViewPanoramaView 不再通过 onCreate() 请求焦点,因此不会再导致视图滚动至使街景可见的位置。(问题 7566
  • 修复了导致资源在严格模式下显示的资源泄露问题。(问题 5992
  • 修复了在无障碍模式下使用 setPadding() 时出现的 NullPointerException。(问题 7619
  • 修复了从资源加载图标时会使应用崩溃的错误。(问题 7696

2014 年 12 月 8 日

特点

  • API 提供了一种全新的精简模式。如果启用精简模式,API 将传送位图图像,而不是完全互动地图。精简模式支持所有地图类型以及完整 API 提供的一部分功能。标记和形状在静态图片客户端顶部绘制,因此,您仍然可以完全控制它们。如果您希望显示多个小型地图,或者想要显示的地图因过小而无法支持有意义的互动,便可使用精简模式。
  • 新的地图工具栏在精简模式和完整模式下都可以使用,对于针对新客户端库重新编译的应用,地图工具栏在这两种模式下默认处于启用状态。点按工具栏即可打开 Google 地图移动应用,让用户可以快速获取前往所选标记的路线和精细导航。在精简模式下,工具栏处于静态;而在完整模式下,它会在用户点按标记时滑入。您可以通过调用 UiSettings.setMapToolbarEnabled(false) 在这两种模式下停用工具栏。
  • API 支持新的 onMapReady() 回调,您可以通过调用 MapView.getMapAsync()MapFragment.getMapAsync() 对其进行设置。在地图做好使用准备时,系统将调用 onMapReady() 方法,该方法提供 GoogleMap 的非 null 实例。这意味着,您不再需要在使用地图前检查是否存在非 null 地图。请参阅有关添加地图的指南。
  • 同样,您现在可以使用 StreetViewPanoramaView.getStreetViewPanoramaAsync()StreetViewPanoramaFragment.getStreetViewPanoramaAsync() 获取可立即使用的街景全景图片。请参阅文档

解决的问题

  • 现在,GoogleMap.CancelableCallback() 可以在为相机添加动画效果或移动相机时正确运行。(问题 5208
  • 现在,可以在横屏模式下正确计算可见区域的 LatLngBounds。(问题 5285
  • 修复了标记性能下降的问题。(问题 7174
  • 修复了对凸四边形进行三角剖分时箭头形状出现的问题(问题 6197 - 最初报告的问题现已修复)

备注

  • getMap()弃用,取而代之的是新 getMapAsync(),如上文所述。同样,getStreetViewPanorama() 也已弃用,取而代之的是新 getStreetViewPanoramaAsync()
  • 对于针对新客户端库重新编译的应用,地图的缩放控件默认处于停用状态。在此版本之前,它们默认处于启用状态。您仍然可以通过调用 UiSettings.setZoomControlsEnabled() 启用和停用这些控件。

2014 年 10 月 16 日

2014 年 5 月 13 日

  • 添加了街景,用于嵌入和控制 360 度全景视图。
  • 室内地图添加了功能,以便您响应室内事件和楼层变化事件,并将楼层选择器替换为您自己的楼层选择器。(问题 5939
  • 改进了各个嵌入控件的无障碍功能
  • 在 Maps Engine 图层信息卡上启用了中文字符显示。

2014 年 5 月 6 日

特点

  • 支持 Google Maps Engine 图层。利用新的 MapsEngineLayer 类,将 Google Maps Engine 图层添加为互动式图块叠加层。

2014 年 1 月

特点

  • TileOverlayOptions 添加了 fadeIn 标记,用于切换图块的淡入。

解决的问题

  • 失败的 API 密钥身份验证尝试不再缓存。(问题 6099

2013 年 10 月

特点

  • GroundOverlay 类添加了 setImage 方法,该方法可让您更改地面叠加层的图片。(问题 4847
  • 向标记添加了 alpha 选项和 setAlpha 方法。(问题 4768
  • GoogleMap 类添加了 setOnMapLoadedCallback 方法。地图完成渲染后,系统会调用 onMapLoaded。(问题 5779
  • GoogleMap 类添加了 setBuildingsEnabled 方法。默认情况下,建筑物仍处于启用状态。(问题 5550
  • 更新了 Google 徽标。

解决的问题

  • 现在,OnCameraChangeListener 中返回的 CameraPosition 支持地图内边距。(问题 5844
  • 现在,GroundOverlay.setPositionFromBounds 会重新绘制地面叠加层。

2013 年 9 月

特点

  • GoogleMap 类添加了 setPadding 方法,该方法可让您指明地图中可被其他视图遮盖的部分。设置内边距会调整标准地图控件的位置,而且相机更新将使用含内边距的区域。(问题 4670问题 5321
  • 添加了 LatLngBounds.getCenter 方法。(问题 4664
  • Marker 添加了以下方法:

解决的问题

  • GooglePlayServicesUtil.getErrorDialog 始终返回对话框,但可以使用 Google Play 服务的情况除外。(问题 4720

2013 年 8 月

特点

  • 初始版本。