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

Stu*_*ing 24 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.
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗???

回答

我将在此发布,因为解决了我的问题的原因已在下面接受的答案的评论中说明.

这是READ_GSERVICES许可.出于某种原因,在开发人员网站上使用它们时未提及该权限.

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

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

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

添加证书签名以访问API.

yourrelease-fingerprint; com.example.project.package
yourdebug-fingerprint; 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"/>
Run Code Online (Sandbox Code Playgroud)

添加以下权限:

<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"/>
Run Code Online (Sandbox Code Playgroud)

添加以下功能请求:

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />
Run Code Online (Sandbox Code Playgroud)

  • 就像你发布它我做的那样.这是READ_GSERVICES权限.在开发者网站上获得了不在那里的许可?谢谢你的帮助 (5认同)

小智 18

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

1)启用了错误的服务.确保已启用" Google Maps Android API v2 ",而非" Google Maps API v2 "并重新生成API密钥.

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

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


Mud*_*dar 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>
Run Code Online (Sandbox Code Playgroud)