地图片段在 Android 中不工作

Map Fragment not working in Android

我已经尝试了一千种配置和代码,但我的地图 activity 坚持不工作。我尝试过的事情:

AndroidManifest.xml

build.gradle

代码

activity_map.xml:

    <fragment android:id="@+id/activityMapID"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:map="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

其他

在第一次通话中,我有这个日志:

    03-21 09:34:28.478 25570-26174/com.myapp I/LoadedApk: connected(), package name=com.google.android.gms ,class name=com.google.android.gms.maps.auth.ApiTokenService
    03-21 09:34:29.770 25570-25570/com.myapp I/Choreographer: Skipped 127 frames!  The application may be doing too much work on its main thread.
    03-21 09:34:30.020 25570-27391/com.myapp I/b: Sending API token request.
    03-21 09:34:30.090 25570-25633/com.myapp I/LoadedApk: connected(), package name=com.google.android.gms ,class name=com.google.android.location.internal.GoogleLocationManagerService
    03-21 09:34:31.231 25570-27391/com.myapp I/b: Received API Token: AH0uPGGIx9Ygap4ZXq8T8vK7qcPxgyDi5NRIaIPyPauG4xWFn1lI7KQF9IuY2yqbpYMhWitKnTUiU-sZD9tFdJvr1naCVhz3c9APmLbueopuhcD6K5LHpZKnkYCQDEefhrTeGPNOR0fdz0QmC4WD8rkgQTbLmfbnOIA7cvZZBOmn7hFmcyavIVRQZlaY9_OLaPMFxIVFVBml / Expires in: 432000000ms
    03-21 09:34:31.241 25570-27391/com.myapp I/c: Scheduling next attempt in 431700 seconds.
    03-21 09:34:31.251 25570-27391/com.myapp I/d: Saved auth token
    03-21 09:34:31.832 25570-25582/com.myapp I/LoadedApk: connected(), package name=com.google.android.gms ,class name=com.google.android.gms.clearcut.service.ClearcutLoggerService

然后在第二次调用后,我收到消息说我的密钥无效:

    03-21 09:35:22.596 25570-25633/com.myapp I/LoadedApk: connected(), package name=com.google.android.gms ,class name=com.google.android.gms.clearcut.service.ClearcutLoggerService
    03-21 09:35:37.762 25570-25570/com.myapp I/Google Maps Android API: Google Play services package version: 8703034
    03-21 09:35:37.973 25570-28472/com.myapp E/Google Maps Android API: Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).
    03-21 09:35:38.363 25570-25582/com.myapp I/LoadedApk: connected(), package name=com.google.android.gms ,class name=com.google.android.location.internal.GoogleLocationManagerService

我真的不知道该怎么办了。有人知道会发生什么吗?

提前致谢。

尝试在 build.radle

的末尾添加这一行

apply plugin: 'com.google.gms.google-services'

将其添加到 manifest 标签内:

<uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" >
    </uses-feature>

终于找到问题了

在我的代码的另一部分,我正在调用

    HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

为了简化我为 HTTPS 所做的所有调用。问题是当 Google 地图试图调用其服务器时:它使用的是我之前设置的相同 SSL 上下文,因此它无法连接到地图服务器。

我刚刚评论了那行并将我的代码更改为:

    URLConnection urlConn = new URL(myAddress).openConnection();
    HttpsURLConnection https = (HttpsURLConnection) urlConn;
    https.setSSLSocketFactory(sslContext.getSocketFactory());

一切都像变魔术一样有效!

谢谢大家!