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

Кто-то там уже сказал это в комментарии: Перезагрузите телефон. Или, если вы используете эмулятор: Перезапустите эмулятор.