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