Карта Google Android показывает пустую

Я пытаюсь реализовать карты Google V2, но карты отображаются пустыми. Я отредактировал манифест, создал XML-макет и активность, но карты отображаются пустыми.

Вот что я сделал с манифестом:

<permission
        android:name="com.biznismap.com.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="com.biznismap.com.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

и добавил это как первый дочерний узел приложения в манифесте:

<uses-library android:name="com.google.android.maps" />

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="my_key" />

Вот мой 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:apiKey="my_key"
    android:clickable="true" />

Вот моя MapActivity:

public class ListingMap extends MapActivity {

    private HelloItemizedOverlay itemizedoverlay;
    private List<Overlay> mapOverlays;
    private String lat, lng;

    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listing_map);
        MapView mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);

        mapOverlays = mapView.getOverlays();
        Drawable drawable = this.getResources().getDrawable(
                R.drawable.ic_launcher);
        itemizedoverlay = new HelloItemizedOverlay(drawable);
        getExtras();
    }

    private void getExtras() {
        Bundle extras = getIntent().getExtras();
        lat = extras.getString("lat");
        lng = extras.getString("lng");
        Log.v("--", lat+" "+lng);
        float latitude=Float.valueOf(lat);
        float longitude=Float.valueOf(lng);
        GeoPoint point = new GeoPoint((int)(latitude * 1E6),(int)(longitude * 1E6));
        OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!",
                "I'm in Mexico City!");
        itemizedoverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedoverlay);
    }

}

Итак, все идет хорошо, но когда я хочу что-то отобразить, карта пуста, и я получаю это от эмулятора:

06-02 17:09:26.921: E/MapActivity(1772): Couldn't get connection factory client

Итак, где я ошибаюсь, и как я могу решить эту проблему?


person Darko Petkovski    schedule 03.06.2013    source источник
comment
глупый вопрос, но вы добавили правильный ключ? и используете ли вы SDK с поддержкой Google API?   -  person varun    schedule 03.06.2013
comment
@varun Я думаю, что знаю, только что зарегистрировал новый ключ для приложения Android, ввел имя своего пакета и т. Д. Так что я думаю, что это все   -  person Darko Petkovski    schedule 03.06.2013


Ответы (4)


Вот что https://developers.google.com/maps/documentation/android/v1/hello-mapview говорит:

Примечание. Версия 1 Google Maps Android API официально объявлена ​​устаревшей с 3 декабря 2012 года. Это означает, что с 18 марта 2013 года вы больше не сможете запрашивать ключ API для этой версии. Никаких новых функций не будет добавлено в Google Maps Android API v1. Однако приложения, использующие v1, продолжат работать на устройствах. Существующим и новым разработчикам рекомендуется использовать Google Maps Android API v2.

Ваш код смешивает свойства v1 и v2.

person Alex    schedule 29.10.2013

У вас тут две проблемы. В v2 вы не можете использовать

<uses-library android:name="com.google.android.maps" />

, и ваш макет недействителен. Если вам нужна карта с полным макетом, просто используйте это:

<FrameLayout
... >

    <fragment
        ...
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment" />
</FrameLayout>

В вашем коде Java используйте FragmentActivity и:

    map = ((SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.your_id)).getMap();

Таким образом, вы получите совместимость с предварительными сотовыми устройствами. Удачи!

person webo80    schedule 03.06.2013
comment
@Divya Motiwala тот же ответ;) - person webo80; 03.06.2013
comment
продолжайте думать, что мой ответ действителен, показывает пример и был опубликован первым, но... это решение Дарко - person webo80; 30.10.2013

Либо у вас нет подключения к Интернету (мое предположение), либо вы ввели неверный ключ. Дважды проверьте обе эти вещи.

Кроме того, убедитесь, что на эмуляторе, который вы используете для тестирования (если применимо), установлены API Google.

person Booger    schedule 03.06.2013
comment
Может проблема в имени пакета. Потому что мой основной пакет — com.myapp.com, но моя активность на карте находится в com.myapp.com.activities? - person Darko Petkovski; 03.06.2013

MapView больше не используется с API v2. Вместо этого используйте:

   <fragment
      android:id="@+id/map"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:name="com.google.android.gms.maps.SupportMapFragment"/>

Соответственно, используйте FragmentActivity вместо MapActivity и раздуйте карту.

Вы можете проверить загрузку карты с помощью Google Map API. V2 для более подробной информации

person Divya Motiwala    schedule 03.06.2013