24

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

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

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

有任何想法吗???

回答

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

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

4

10 回答 10

48

要在 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 控制台
在服务页面上,找到Google Maps Android API v2.

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

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

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

yourrelease-fingerprint;com.example.project.package
yourdebug-fingerprint;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" />
于 2012-12-05T16:39:43.397 回答
18

确保注意以下所有要点:

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

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

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

于 2013-04-23T10:56:39.703 回答
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>
于 2012-12-05T17:01:39.343 回答
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 不起作用。

于 2013-03-31T16:24:35.427 回答
1

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

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

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

于 2013-01-28T09:21:28.503 回答
1

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

于 2013-05-03T00:12:13.737 回答
0

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

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

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

于 2013-04-23T15:34:48.500 回答
0

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

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

于 2013-04-23T23:03:48.973 回答
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>
于 2013-07-16T11:25:43.723 回答
0

I did everything what was required to achieve this task. My key, manifest, code etc. were all right. But, in the end after wasting a lot of time, the debug keystore which I was using was the wrong one. It's was all about the SHA1 fingerprint after all.

于 2015-05-10T06:26:35.900 回答