Google Maps API V2'无法加载地图。无法联系Google服务器'

时间:2012-12-05 16:37:31

标签: android android-maps

我已经检查并仔细检查了我在Google控制台上注册的API密钥但是我仍然收到以下错误:

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

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

任何想法???

答案

我会在这里发布,因为解决了我的问题的原因在下面接受的答案的评论中说明了。

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

10 个答案:

答案 0 :(得分:48)

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

API访问应用密钥

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

  

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。

  

yourrelease指纹; com.example.project.package
  yourdebug指纹; com.example.project.package

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

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

修改App Manifest

<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" />

答案 1 :(得分:18)

确保所有下面提到的要点都得到照顾:

1)启用了错误的服务。确保&#34; Google Maps Android API v2 &#34;,而不是&#34; Google Maps API v2 &#34;已启用并重新生成API密钥。

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

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

答案 2 :(得分:7)

这可能是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>

答案 3 :(得分: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不起作用。

答案 4 :(得分:1)

我遇到了同样的问题;但对我来说这是密钥库问题我用debug keystore签名,因此Google map api v2无法连接到Google地图。

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

使用应用程序清单文件中生成的api密钥。使用my-release-key.keystore对其进行签名即可将其推送到设备上。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

Google Maps Android API v2
Google Maps API v2
Google Maps API v3 ...

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

答案 7 :(得分:0)

只需使用SHA创建 API密钥,最重要的是更正包名称(例如com.example.mapdemo)。在AndroidManifest.xml

中使用新生成的密钥

我想我们需要新的API密钥用于所有使用Google地图的新eclipse项目(因为创建新的密钥也需要包名称,这对所有项目来说都是不同的。)

答案 8 :(得分:0)

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

如果以上都没有帮助您解决问题, 尝试将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>

答案 9 :(得分:0)

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