地图 Android API 在没有在线初始化的情况下无法离线工作

Maps Android API doesn't work offline without online initialization

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

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

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

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

经过一些试验,我找到了一个简单的解决方案。

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

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

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

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)