【问题标题】:Google Maps API V2 'Failed to Load Map. Could not contact Google Servers'Google Maps API V2 '未能加载地图。无法联系 Google 服务器
【发布时间】:2015-05-10 14:26:35
【问题描述】:

我已经检查并再次检查了我在 Google 控制台上注册的 APIkey,但是我仍然收到以下错误:

12-05 16:31:12.940: E/Google Maps Android API(12334): Failed to load map.  Could not contact Google servers.

我看到的是地图视图的放大/缩小按钮和背景,但没有地图???!!!

有什么想法吗???

回答

我会在此处发布它,因为解决我的问题的方法已在下面接受的答案的 cmets 中说明。

这是READ_GSERVICES 权限。出于某种原因,在使用它们时,开发者网站上没有提及许可。

【问题讨论】:

    标签: android android-maps


    【解决方案1】:

    要在 Android 上设置 Google Maps API v2,请确保您已完成所有以下步骤。

    API 访问的应用密钥

    当 Google 要求您提供应用证书的 SHA1 指纹时,您很可能希望运行两次,一次用于调试证书,一次用于发布证书。

    keytool -list -v -keystore publishcert.keystore
    keytool -list -v -keystore ~/.android/debug.keystore

    市场上应用的指纹与你刚刚测试的应用的指纹不同!

    在 Google API 控制台上启用服务

    登录Google API Console
    在服务页面,找到Google Maps Android API v2

    注意 - Google Maps API v2 不同 然后 Google Maps Android API v2

    在 API 访问选项卡中,单击 Create new Android Key

    添加您的证书签名以访问 API。

    你的发布指纹;com.example.project.package
    你的调试指纹;com.example.project.package

    您将获得一个生成的 API 访问密钥。

    您可能需要先在 API 控制台中创建一个 API 项目

    修改应用清单

    <application> 元素内添加您的 API 密钥。

    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="yourapikey"/>
    

    添加以下权限:

    <permission
            android:name="com.example.project.package.permission.MAPS_RECEIVE"
            android:protectionLevel="signature"/>
    
    <uses-permission android:name="com.example.project.package.permission.MAPS_RECEIVE"/>
    
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    

    添加以下功能请求:

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

    【讨论】:

    • 使用我位于 User/.android/debug.keystore 的调试密钥对其进行了明确签名
    • 您是否在 Google API 控制台中启用了 Maps API 的使用?
    • 是的,服务位我已将其打开并接受条款和条件。
    • 正如你发布的那样,我已经做到了。这是 READ_GSERVICES 权限。在不存在的开发者网站上获得许可?感谢您的帮助
    • 谢谢!经过几个小时的调试,你让我意识到我选择了谷歌地图而不是谷歌地图 android...
    【解决方案2】:

    确保注意以下所有要点:

    1) 启用了错误的服务。确保启用了“Google Maps Android API v2”,而不是“Google Maps API v2”,然后重新生成 API 密钥。

    2) 将以下元素添加到您的清单中。 将 com.example.mapdemo 替换为应用程序的包名称。

    3) 使用正确的证书和密钥。 发布证书,当您在我的手机上运行应用程序时,它在调试期间将不起作用。您必须改用调试密钥库证书指纹。

    【讨论】:

    • FUUUUUUUUUUUUUUUUUUUUUUUUUUUUU。好的,错过了 google maps android api v2,我是个白痴。谢谢
    • “Google Maps Android API v2”,而不是“Google Maps API v2”
    • 因为这种愚蠢而浪费了我半天的时间
    • 哈哈,同样的问题,我添加了 Google Maps API v2,该死的那个是错误的。四个小时我不会回来。谢谢!!!
    【解决方案3】:

    这可能是 Manifest 的问题。以下对我有用,特别是 permission.MAPS_RECEIVE 解决了我遇到的类似问题:显示缩放按钮和 myLocation,但地图没有图块...

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.discos2.example"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="17" />
    
        <permission
            android:name="com.discos2.example.permission.MAPS_RECEIVE"
            android:protectionLevel="signature" />
    
        <uses-permission android:name="com.discos2.example.permission.MAPS_RECEIVE" />
    
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    
        <uses-feature
            android:name="android.hardware.location"
            android:required="false" />
        <uses-feature
            android:name="android.hardware.location.network"
            android:required="false" />
        <uses-feature android:name="android.hardware.location.gps" />
        <uses-feature
            android:name="android.hardware.wifi"
            android:required="false" />
        <uses-feature
            android:glEsVersion="0x00020000"
            android:required="true" />
    
        <application
            android:hardwareAccelerated="true">
            <meta-data
                android:name="com.google.android.maps.v2.API_KEY"
                android:value="__NEW_GOOGLE_MAPS_V2_KEY_GOES_HERE__" />
    
            <activity
                android:name=".ui.activities.MainActivity" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
        </application>
    
    </manifest>
    

    【讨论】:

    • 感谢发布我缺少的权限是 READ_GSERVICES
    • 非常感谢您的解释!
    【解决方案4】:

    顺便说一句,我正在运行 Windows 7。我为此烦恼了好几天,直到我发现以下内容: 我有不止一个 debug.keystore。 一个在:

    C:\android-sdk\.android\debug.keystore
    

    还有一个,在:

    C:\Users\David\.android\debug.keystore
    

    一旦我找到了“C:\Users\David.android\debug.keystore”,我就做了:

    keytool -list -alias androiddebugkey -keystore C:\Users\David\.android\debug.keystore -storepass   android -keypass android -v
    

    我将生成的 SHA1 提交到谷歌控制台并获得了一个有效的 API 密钥。 从“C:\android-sdk.android\debug.keystore”的密钥库获取 SHA1 不起作用。

    【讨论】:

      【解决方案5】:

      我也面临同样的问题;但对我来说,这是密钥库问题,我使用调试密钥库对其进行签名,因此 Google 地图 api v2 无法连接到 Google 地图。

      我使用my-release-keystore.keystore创建了一个新的api密钥(你可以在C:\Users\{YOUR_USER_NAME}\.android\my-release-key.keystore找到它)使用JDK中可用的keytool生成SHA1;复制它并在谷歌控制台注册。

      使用在您的应用程序清单文件中生成的 api 密钥。用my-release-key.keystore签名会推送到设备上。

      【讨论】:

        【解决方案6】:

        您可能启用了错误的服务“Google Maps Android API v2”,而不是“Google Maps API v2”

        【讨论】:

          【解决方案7】:

          我遇到了同样的问题。我只是错过了这一点: 当您列出您的 Google API 服务时,有三个可用的 Google Maps API。

          Google 地图 Android API v2
          谷歌地图 API v2
          谷歌地图 API v3 ...

          在为 Android 编写代码时,检查您是否启用了 Android 版本(Google Maps Android API v2)。 Google Maps API v2 不够好。

          【讨论】:

            【解决方案8】:

            只需使用 SHA 和最重要的是正确的包名称(如 com.example.mapdemo)创建 new API 密钥。在AndroidManifest.xml 中使用新生成的密钥。

            我想我们需要为所有使用 Google 地图的新 Eclipse 项目提供新的 API 密钥(因为创建新的 key 还需要包名,这对于所有项目来说本质上是不同的)。

            【讨论】:

              【解决方案9】:

              花了好几个小时,终于解决了问题:

              如果以上都不能帮助您解决问题, 尝试将您的 api 密钥放入 values/strings.xml

              <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="@string/map_key"/>
              
              <?xml version="1.0" encoding="utf-8"?>
              <resources>
              <string name="map_key">YOUR_KEY</string>
              </resources>
              

              【讨论】:

                【解决方案10】:

                我做了完成这项任务所需的一切。我的密钥、清单、代码等都没有问题。但是,最终在浪费了很多时间之后,我使用的调试密钥库是错误的。毕竟这都是关于 SHA1 指纹的。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多