24

I have been trying to app a Google Map in my Android app using the v2 API for the past two days, with no success. All I get every time is a

Google Maps Android API(16603): Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).

I have followed Google's setup tutorial (https://developers.google.com/maps/documentation/android/start), tried multiple times with different projects in different workspaces, tried different Google accounts, gone through various answers and suggestions here in StackOverflow, but to no avail.

I am using Eclipse 4.2.2 with Android SDK Tools 22.01 and I have installed Google Play services (rev. 7), also I have imported google-play-services_lib into my workspace and added a reference to that to my android project.

Here is my code:

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.googlemapdemo"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<permission
    android:name="com.example.googlemapdemo.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.example.googlemapdemo.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-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.googlemapdemo.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="my_api_key" />
</application>

</manifest>

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/the_map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.SupportMapFragment"
/>

MainActivity.java

package com.example.googlemapdemo;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;

public class MainActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

Also I created an API Project on https://code.google.com/apis/console/ where I have enabled the Google Maps Android API v2 service. Then I obtained my SHA1 debug certificate fingerprint using

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

and entered that and the package name in the API console, got the API key and put it in the manifest (where my_api_key is). This procedure I repeated a number of times, regenerating the key but with the same result.

Could anyone help with this or suggest anything else I could try? Any help will be greatly appreciated!

4

17 回答 17

25

简单的。

如果您确定 API 密钥是正确的,并且 Logcat 仍然出现此错误,请尝试以下操作:

  1. 从设备上卸载应用程序。
  2. 清理项目
  3. 并再次在设备上运行

地图现在应该显示在设备上....这对我有用..干杯:)

于 2013-08-15T17:32:36.063 回答
22

毕竟,在我正在使用的设备上关闭 WiFi 后找到它。似乎在通过 WiFi 进行调试时,您还需要

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

在清单中。不知道这只是我的情况还是一般情况,但我想它应该在某个地方的文档中(不是)。

因此,如果您正在阅读本文并遇到类似问题,请尝试禁用 WiFi 或将上述权限与其他权限一起添加。

于 2013-07-08T13:28:35.220 回答
10

确保您仔细遵循以下文档中的说明:

https://developers.google.com/maps/documentation/android/start#obtain_a_google_maps_api_key

在新的 ADT 中,您应该会在 logcat 查看器中看到一条错误消息,它会为您提供明确的说明,例如去哪里、启用什么以及您需要粘贴到 android 指纹和应用程序详细信息中的详细信息。见下文;

在此处输入图像描述

一些Gochas;

  1. 在开发者控制台中同时启用Google Maps Android API v2Google Play Android Developer API !这让我:)

  2. 确保您使用正确的密钥库来查找 SHA1 哈希(可以通过转到 window->preferences->android->build并查找 SHA1 找到)这将与您的生产密钥库不同!否则可以使用 keytool -list -v -keystore YOURKEYSTORE.keystore -alias YOURALIAS 查看SHA1

  3. 在标签中添加元素

  4. 在 < .manifest > 标签内添加你的元素(标签上方)

于 2014-06-18T09:55:29.510 回答
5

这个权限解决了问题

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
于 2013-12-12T13:06:15.650 回答
3

我遇到了同样的问题,发现这组权限有效。

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
于 2013-10-22T20:53:16.127 回答
3
<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="my_api_key" />

android:value="my_api_key" 应该是您从https://code.google.com/apis/console获得的实际密钥

于 2013-07-05T14:44:40.350 回答
2

我的解决方案是使用正确的文件

在我的情况下,我在 C:\Users\.android 中使用 debug.keystore 来生成 SH1 KEY

经过多次尝试,在C:\Users\\Downloads\adt-bundle-windows-x86_64\adt-bundle-windows\sdk.android中找到另一个文件并 使用它,用于生成 SH1 密钥

然后将45:B5:E4:6F:36:AD:0A:98:94:B4:02:66:2B:12:17:F2:56:26:A0:E0 值复制到 api 密钥站点

再次工作

于 2014-06-05T19:52:44.150 回答
2

我认为这是您的 API 密钥的问题。

从新项目中尝试地图的 Android 示例项目(谷歌播放服务)。

并将您的 API 密钥添加到地图 AndroidManifest.xml 文件中。

如果它不起作用,那将是 API Key 的问题。

于 2013-07-11T16:02:29.560 回答
2

我的类似问题的答案是添加:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
于 2013-09-18T15:01:06.947 回答
2

确保“Google Maps Android API v2”已启用,在 Google API 控制台下,服务(请参见下面的屏幕截图。如果未启用,尽管您输入了 SHA1 密钥,但您不会收到说明该服务已禁用的错误消息。

截屏

于 2014-05-29T12:58:31.410 回答
2

只需花费几个令人沮丧的时间来解决这个完全相同的问题。

试图从 Google 运行 mapdemo 应用程序。生成的新密钥等仍然无法运行。

上面详述的简单解决方案是从平板电脑中删除应用程序并再次运行 Eclipse。问题消失了。

在 Eclipse 中:Window、Preferences、Android、Build、来自调试密钥库的 SHA1 指纹是您需要的值(这与 Google 记录的在命令行中使用 Keytool 的方式相匹配)。

于 2013-07-30T16:27:12.657 回答
2

只是说,我确信我做的一切都很好,但我终于注意到项目中的包名称与 AndroidManifest.xml 中声明的名称不同,因此与 Google APIs 控制台中的不同。

你猜怎么着,我改变了它,然后...... tadaa它工作了!

所以对于谁来这里,也检查一下!

于 2014-06-06T07:27:08.457 回答
1

我找到了新的解决方案,这是我的愚蠢错误。

可能你application package name在谷歌地图集成后改变了你。

每行一个 SHA1 证书指纹和包名称(用分号分隔)。例子:

45:B5:E4:6F:36:AD:0A:98:94:B4:02:66:2B:12:17:F2:56:26:A0:E0;com.example

检查谷歌 API 控制台

于 2014-03-26T06:51:40.503 回答
1

确保您已使用正确的密钥签名 apk

http://developer.android.com/tools/publishing/app-signing.html

于 2013-09-14T22:17:00.733 回答
0

在花了几个小时并遵循 stackoverflow 上的每个提示后,我尝试了最后一件事。

我希望我的地图显示在另一个我称之为 mapActivity 而不是 mainActivity 的活动中。所以当我在谷歌控制台 api 中创建 sh1 键时,我为我的 mapActivity 输入了包名称。

!!但它总是需要是主要活动的包名,即使你没有在那里显示地图,所以 =packagename.appname来自mainactivity

于 2014-05-22T14:00:56.103 回答
0

确保您在 Google Developers Console 中使用的是调试证书指纹,而不是发布指纹。可以在此处找到有关查找调试密钥的说明。

于 2014-07-10T19:25:02.980 回答
0

我已经解决了这类问题,我希望和我有同样问题的人(希望没有其他人会犯同样的错误)会觉得这很有帮助

我的原因是我在创建项目时犯了一个错误,包名错误然后我更改了项目的包名,这将产生2个名称相同但包名不同的应用程序。从这里开始,地图不再起作用。那么即使我更改了服务器端的 google api 密钥,它仍然无法正常工作。

解决方案:尝试先卸载这两个应用程序,然后清理解决方案。地图再次出现。

于 2013-09-25T16:53:02.503 回答