Подтвердить что ты не робот

API Google Maps V2 'не удалось загрузить карту. Не удалось связаться с серверами Google Servers,

Я проверил и дважды проверил свой API-ключ, который я зарегистрировал в Google Консоли, но я все еще получаю следующую ошибку:

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

То, что я вижу, это кнопки увеличения/уменьшения и фон для MapView, но нет карты???!!!

Любые идеи???

Ответ

Я отправлю его здесь, потому что решение моей проблемы было указано в комментариях принятого ниже ответа.

Это было разрешение READ_GSERVICES. По какой-то причине разрешение не было упомянуто на сайте разработчика, когда оно пришло к их использованию.

4b9b3361

Ответ 1

Для настройки Google Maps API версии 2 на Android убедитесь, что вы выполнили все следующие шаги.

Ключ приложения для доступа к API

Когда Google запрашивает отпечаток SHA1 вашего сертификата приложения, вам, скорее всего, захочется запустить его дважды, один раз для вашего сертификата для отладки и один раз для вашего сертификата публикации.

keytool -list -v -keystore publishcert.keystore
keytool -list -v -keystore ~ ​​/.android/debug.keystore

Отпечаток приложения на рынке отличается от отпечатка пальца приложения, которое вы просто тестируете!

Включить службу в консоли API Google

Войдите в Консоль API Google.
На странице служб найдите Google Maps Android API v2.

Примечание - Google Maps API v2 РАЗНОЕ, затем Google Maps Android API v2

На вкладке API Access нажмите Create new Android Key

Добавьте подписи сертификатов для доступа к API.

yourrelease-отпечатков пальцев; com.example.project.package
yourdebug-отпечатков пальцев; com.example.project.package

Вам будет предоставлен сгенерированный ключ доступа к API.

Возможно, вам сначала нужно создать проект API в консоли API

Изменить манифест приложения

Добавьте свой API-ключ внутри элемента <application>.

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

Ответ 2

Удостоверьтесь, что все нижеуказанные пункты соблюдаются:

1) Неверная служба была включена. Убедитесь, что " API Google Maps Android v2", а не " API Google Maps v2" включен и повторно сгенерирован ключ API.

2) Добавьте в свой манифест следующие элементы. Заменить com.example.mapdemo с именем вашего приложения.      

3) Использование правильного сертификата и ключа. Сертификат выпуска, который НЕ РАБОТАЕТ во время отладки при запуске приложения на моем телефоне. Вместо этого вы должны использовать отпечаток сертификата отладочного хранилища ключей.

Ответ 3

Это может быть проблемой с манифестом. Следующие работы для меня, в частности 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>

Ответ 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 в консоль Google и получил API-ключ, который работает. Получение SHA1 из хранилища ключей в "C:\android-sdk.android\debug.keystore" не работает.

Ответ 5

Я столкнулся с той же проблемой; но для меня это была проблема с хранилищем ключей, которую я подписывал с отладочным хранилищем, поэтому карта Google api v2 не смогла подключиться к карте Google.

Я создал новый ключ api с помощью my-release-keystore.keystore (вы можете найти его в C:\Users\{YOUR_USER_NAME}\.android\my-release-key.keystor e) для генерации SHA1 с использованием keytool, доступного в JDK; скопируйте его и зарегистрируйтесь на консоли Google.

Используйте ключ api, сгенерированный в файле манифеста приложений. Подпишите его с помощью my-release-key.keystore, нажимая его на устройство.

Ответ 6

Возможно, вы включили неверную услугу "Google Maps Android API v2", а не "Google Maps API v2"

Ответ 7

У меня была та же проблема. Я просто пропустил этот момент: Когда вы указываете свои службы Google API, есть три API Карт Google.

Google Maps Android API v2
API Карт Google v2
API Карт Google v3 ...

Убедитесь, что у вас установлена ​​версия Android (Google Maps Android API v2), когда вы кодируете Android. API Google Maps v2 был недостаточно хорош.

Ответ 8

Просто создайте ключ новый API с SHA и, самое главное, правильное имя пакета (например, com.example.mapdemo). Используйте новый сгенерированный ключ в AndroidManifest.xml.

Я думаю, нам нужен новый ключ API для всех новых проектов eclipse, которые используют карты Google (поскольку создание нового ключа также требует названия пакета, что существенно отличается для всех проектов).

Ответ 9

Проведя много часов, проблема была в конечном итоге решена:

если ни одно из вышеперечисленных действий не помогло вам решить вашу проблему, попробуйте добавить ключ api в значения /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>

Ответ 10

Я сделал все, что требовалось для достижения этой задачи. Мой ключ, манифест, код и т.д. Были в порядке. Но, в конце концов, потратив много времени, хранилище отладки, которое я использовал, было неправильным. Это все касалось отпечатка SHA1.