Android MapActivity: не удалось получить соединение factory клиент
Я пытаюсь запустить демоверсии карт, как это предусмотрено в API Google
примеры проектов. Я использую AVD и пробовал с версиями 8, 10
и 11 и получить ту же проблему.
Я создал собственный ключ отладки и добавлен в проект. Я вижу
карта в приложении запускается и может увеличивать и т.д. - поэтому я получаю карту
плитка, мелкая.
Да. У меня есть правильные разрешения и библиотека, установленные в манифесте
файл (согласно образцам).
Но я не могу установить местоположение на карте, либо через DDMS, либо через Telnet. я
см. следующую ошибку в LogCat:
MapActivity: не удалось получить соединение factory клиент
Я читал многочисленные темы, касающиеся этой проблемы, но они всегда кажутся
быть в результате плохого ключа API; которого у меня нет, поскольку я
извлечение фрагментов карты.
Итак, я создал свой собственный проект, чтобы проверить это дальше, и я выполняю
следующий код при инициализации моей карты:
myLocationOverlay = new MyLocationOverlay(this, mapView);
mapView.getOverlays().add(myLocationOverlay);
myLocationOverlay.enableCompass();
myLocationOverlay.enableMyLocation();
Log.i("funkatron: ", "ABOUT TO CALL RUN ON FIRST FIX");
myLocationOverlay.runOnFirstFix(new Runnable() {
public void run() {
String loc = "we have a location, executing AnimateTo().
"+myLocationOverlay.getMyLocation().toString();
Log.i("funkatron:",loc);
mapController.animateTo(myLocationOverlay.getMyLocation());
}
});
Я вижу свой первый оператор журнала, но никогда не второй, и "MapActivity:
Не удалось получить соединение factory client ", которое записывается в LogCat при этом
точка.
Я читал, что есть проблемы с эмуляторами SDK v8, поэтому у меня есть
Пробовал с v10 и 11 - но до сих пор нет радости.
Я еще не пробовал это на самом устройстве - скоро сделаю.
Любая помощь по этому вопросу будет принята с благодарностью - это действительно
озадачивая меня;)
веселит
Ответы
Ответ 1
У меня была точно такая же начальная ситуация, как вы описали.
когда вы видите фрагменты карты, очевидно, что некоторые из них отсутствуют, чтобы увидеть позицию на карте:
1. вам нужно место.
я признал, что установка только геопозиции через вид DDMS для эмулятора недостаточно. вы должны явно нажимать каждый раз, когда кнопка "Отправить" в DDMS запускает обновление местоположения на вашем эмуляторе.
(просто для того, чтобы упомянуть: на реальном устройстве у вас есть иногда немного ходить, чтобы ваше устройство получало обновление местоположения;), я так разозлился, пока я не ходил вокруг, думая о том, что делать сейчас ^^)
2. вам нужна правильная реализация ItemizedOverlay с правильным OverlayItem.
Я написал свой собственный оверлей, который получил бит "сложный". если вы не уверены в правильности своей реализации, используйте это руководство для создания реализации с минимальными изменениями Разработчики и разработчики Android для отображения карт
или используйте это:
private class MyItemizedOverlay extends ItemizedOverlay {
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
public MyItemizedOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
@Override
public int size() {
return mOverlays.size();
}
}
private void updateLocationOverlay() {
if (location == null) { return };
List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.XXXX);
MyItemizedOverlay myItemizedOverlay = new MyItemizedOverlay(drawable);
GeoPoint point = new GeoPoint((int)(location.getLatitude() * 1E6), (int)(location.getLongitude() * 1E6));
OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");
myItemizedOverlay.addOverlay(overlayitem);
mapOverlays.add(myItemizedOverlay);
}
Я хочу особо отметить, что вы должны вызвать boundCenter или boundCenterBottom на drawable. иначе он не будет нарисован. будьте осторожны, если вы используете разные маркеры в том же наложении с помощью overlayItem.setMarker, что и вызываете его там.
3. вам нужно переместить представление на карту в точку. вы можете добиться этого следующим образом:
MapController mapController = mapView.getController();
mapController.setCenter(point)
я понял, что функция mapController.zoomToSpan не работает. (по крайней мере для меня, я все еще разрабатываю это приложение). возможно, это то же самое с animateTo. Я не пытался. установленный центр работает. (и setZoom).
Возможно, в упомянутых вами точках есть что-то, что может привести к тому, что ваша карта не работает так, как вы хотите.
Удачи!
edit: я забыл упомянуть, что я все еще получаю эту клиентскую ошибку factory, даже если она работает, чтобы получить правильное местоположение, реально на устройстве и подделка на эмуляторе через ddms send). я просто игнорирую сейчас.
Ответ 2
Пожалуйста, убедитесь, что вы используете разрешения в своем приложении AndroidManifest.xml.
добавьте эти 3 строки в AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
И также убедитесь, что хранилище ключей указывает на созданное хранилище ключей.
В окне проверки eclipse → Настройки → Android → Сборка: по умолчанию Debug keystore, указывает на ключ, созданный с помощью keytool, иначе используйте кнопку "Обзор" и укажите фактический ключ.
Ответ 3
Привет, коллеги-разработчики,
Я тоже испытал эту проблему и провел почти полдня, пытаясь понять, что происходит. Первоначально активность карты вообще не отображалась, и я получал сообщение об ошибке "Не удалось получить соединение factory client", который, в свою очередь, создал другую ошибку, "java.io.IOException: Server вернулся 3".
Причиной этого является то, что Google не удалось эффективно взаимодействовать с их базой разработки, которая в процессе разработки, то есть перед подписанием и выпуском приложения, вы должны подписать свое приложение с помощью отладочного ключа, который используется во время тестирования. Для этого следуйте приведенному ниже методу, заменив пароль [password] и [key password] собственными паролями.
Из вашего каталога .android введите следующую команду:
keytool -list -alias androiddebugkey -keystore debug.keystore storepass [password] -keypass [key password]
Выполнив вышеуказанное, вы с удовольствием получите свой отпечаток сертификата MD5, который вы можете использовать для регистрации своего ключа API карт Google. Замените свой API API Карт Google в своем проекте, выполните проект "Очистить" и повторно запустите приложение. Теперь вы сможете просматривать свою карту Google и избавляться от своих досадных ошибок.
Как получить ключ API Google Maps для Android
Ответ 4
У меня возникла та же проблема, и проблема заключалась в том, что я пропустил, когда я установил соответствующий макет в MapActivity
код был
setContentView(R.layout.main);
файл макета main.xml не содержит никакого mapview
он стал
setContentView(R.layout.mapview)
которые имеют следующий код XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.google.android.maps.MapView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="YOU_API_KEY"
/>
</LinearLayout>
Карта работает fid прямо сейчас, надеюсь, что это поможет
Также вы можете проверить, добавили ли вы что-либо в свой макет mapview, потому что добавление таких представлений приведет к этой ошибке.
Ответ 5
У меня была та же проблема с "MapActivity Не удалось получить соединение factory client"
То, как я исправил проблему, было очень простым! Я просто удалил все приложение и переустановил его. Это сработало!!!
Ответ 6
У меня была та же проблема с ниже main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="Your API-KEY"
/>
</LinearLayout>
Затем я изменил main.xml как ниже, проблема была решена
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="Your API-KEY"
/>
Ответ 7
Похоже, для этого случаются разные причины. Я исправил это, изменив цель моего проекта на api 10 (rclick в проекте/Свойствах/Android), а затем запустив эмулятор на уровне api 15 (хотя очень, очень медленно!).
Ответ 8
Кто-то там уже сказал это в комментарии: Перезагрузите телефон.
Или, если вы используете эмулятор: Перезапустите эмулятор.