【问题标题】:Maps Android API doesn't work offline without online initializationMaps Android API 在没有在线初始化的情况下无法离线工作
【发布时间】:2017-09-05 12:45:08
【问题描述】:

我在我构建的旅行应用程序中广泛使用离线模式的 Maps Android API。在第一个应用程序启动时,我下载了我需要的所有图块,以便以后在没有 Internet 的情况下可以在现场使用它们。一切都很好,但我注意到 Maps API 在安装应用程序后第一次使用时确实需要互联网连接。该框架可能会执行 API 密钥验证以确保其合法性。

由于我的包含com.google.android.gms.maps.MapView 的片段没有显示在第一个屏幕上,因此存在用户下载地图以在酒店离线使用的风险,然后进入野外,然后... kaboom! - 地图不显示。

如何初始化 Android Map 框架,以便以后在没有连接时可以使用地图?有没有办法跳过在线密钥验证?

【问题讨论】:

  • 下载和缓存切片不需要初始化 MapView 实例,因此在安装应用程序后简单地启动后台服务并获取必要的切片似乎是您最好的选择。
  • 你是对的,但是稍后在没有 Internet 连接的“MapView”中显示它们确实需要初始化,这就是我的问题所在。

标签: android google-maps google-maps-android-api-2


【解决方案1】:

经过一些实验,我发现了一个简单的解决方案。

所以,首先,在我的第一个活动布局中(它是我所有片段的宿主活动),我添加了以下零大小的不可见 MapView

<com.google.android.gms.maps.MapView
    android:id="@+id/dummyMapViewToInitForOfflineUse"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:visibility="invisible"
    />

然后,在活动代码中,我添加了以下方法:

private void initGoogleMapFrameworkToMakeItUsableOfflineLater() {
    dummyMapViewToInitForOfflineUse.onCreate(new Bundle());
    dummyMapViewToInitForOfflineUse.getMapAsync(ignored -> {
        Timber.d("GoogleMap framework initialized and ready to use offline later");
    });
}

您可以在 onCreate 以及任何其他合理的时刻调用它(我使用 AndroidAnnotations,所以我从我的带有 @AfterViews 注释的 init 方法中调用它)。很明显,如果您不使用 AndroidAnnotations 或其他视图绑定框架,则需要执行findViewById(R.id.dummyMapViewToInitForOfflineUse)

【讨论】:

  • 你不需要布局文件中的 mapview 元素,你可以通过编程方式创建一个 mapview 实例然后调用 .onCreate(bundle()) 然后 getmapasync,我在 api 28 模拟器上测试工作正常
【解决方案2】:

如果您的目标是缓存 google map 的图块以供离线使用,那么您可能违反了他们的条款,您首先需要购买他们的企业 Maps API Premier,查看此链接How to cache Google map tiles for offline usage?

【讨论】:

  • 我没有使用 Google 的磁贴,我使用可免费下载的 CartoDB 磁贴。
猜你喜欢
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多