我已经检查并仔细检查了我在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
权限。出于某种原因,在使用它们时,开发者网站上没有提到该权限。
答案 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指纹的。