2013-05-22 13 views
11

Pracuję nad integracją Map Google z aplikacją, nad którą pracuję i miałem do tej pory dość nieprzyjemny czas. Niezależnie od tego, w końcu dostałem SupportMapFragment wyświetlający mapę i ustawiający położenie i poziom powiększenia.Google Maps Android - mapa nagle przestała się wyświetlać

Oto funkcjonalne fragmenty mojego kodu do tej pory:

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 

    super.onActivityCreated(savedInstanceState); 

    Location location = BundleChecker.getExtraOrThrow(KEY_LOCATION, new Bundle[] { savedInstanceState, getArguments() }); 
    setLocation(location); 

    if (checkGooglePlayServicesStatus() == ConnectionResult.SUCCESS) { 
     setMapFragment(new SupportMapFragment()); 
     getActivity().getSupportFragmentManager().beginTransaction().add(R.id.location_detail_mapFrame, getMapFragment()).commit(); 

    } 

    populateAddress(); 
    attachButtonListeners(); 

    Runnable initMap = new Runnable() { 

     @Override 
     public void run() { 

      if (checkGooglePlayServicesStatus() == ConnectionResult.SUCCESS) { 
       try { 
        GoogleMap map = getMapFragment().getMap(); 
        LatLng latLng = getLocation().getAddress().getLatLng(getActivity()); 
        CameraUpdate update = CameraUpdateFactory.newLatLngZoom(latLng, DEFAULT_MAP_ZOOM); 
        map.animateCamera(update); 
       } 
       catch (IOException e) { 
        Log.e(TAG, e.getMessage(), e); 
        Toast.makeText(getActivity(), "Unable to find location", Toast.LENGTH_SHORT).show(); 
       } 
      } 

     } 
    }; 

    Handler handler = new Handler(); 
    handler.postDelayed(initMap, 200); 
} 

Również napisałem prostą metodę ogólnospożywczy, aby uzyskać długość i szerokość geograficzną z mojego modelu Adres że można krytykować, a także:

/* 
* Convenience method to easily check if there is a valid lat & lng in this address 
*/ 
public boolean hasLatLng() { 

    return getLatitude() != null && getLongitude() != null; 
} 

/* 
* Convenience method for use with Google Maps API 
*/ 
public LatLng getLatLng(Context context) throws IOException { 

    LatLng latLng = null; 
    if (hasLatLng()) { 
     latLng = new LatLng(getLatitude(), getLongitude()); 
    } 
    else { 
     String locationString = getStreet() + ", " + AddressUtil.makeCityStateZipString(this); 
     Geocoder geoCoder = new Geocoder(context); 
     try { 
      List<android.location.Address> matches = geoCoder.getFromLocationName(locationString, 2); 
      if (matches != null && matches.size() > 0) { 
       double lat = matches.get(0).getLatitude(); 
       double lng = matches.get(0).getLongitude(); 
       latLng = new LatLng(lat, lng); 
      } 
     } 
     catch (IOException e) { 
      throw new IOException(e); 
     } 
    } 

    return latLng; 
} 

Mam świadomość, że ten kod nie jest idealny i wymaga refakturowania. Po raz pierwszy współpracuję z Mapami Google, więc proszę o sugestie, w jaki sposób mogę to zrobić. Doświadczyłem wielu problemów podczas próby użycia MapFragment jako kodu XML w moim układzie, więc tworzę go programowo.

Sedno sprawy: Otrzymywałem fałszywe dane adresowe z serwera pomostowego, co spowodowało, że zwracana była zerowa metoda Address # getLatLng, co spowodowało wyjątek podczas wywoływania CameraUpdateFactory.newLatLngZoom. Po otrzymaniu tego wyjątku nie mogłem już pobierać danych map od Google. Mapa jest pusty fragment teraz i komunikaty są wyświetlane w LogCat:

SupportMapFragment with no map content

05-21 18: 11: 42,903: I/Mapy Google Android API (15747): Nie można skontaktować się z serwerami Google. Kolejna próba zostanie podjęta po ustanowieniu łączności.

05-21 18: 11: 43.093: E/Google Maps Android API (15747): Nie udało się wczytać mapy. Błąd podczas kontaktowania się z serwerami Google. Jest to prawdopodobnie problem z uwierzytelnianiem (ale może to być spowodowane błędami sieci).

Utworzyłem nowy klucz API i zastąpiłem bieżący w moim manifeście bez zmian. Jedyne zmiany, jakie wprowadziłem w powyższym kodzie, to uwzględnienie zerowej wartości LatLng i od tamtej pory cofnąłem te zmiany w bezsensownej próbie przywrócenia mojego kodu do stanu funkcjonalnego.

Dodatkowo, aby było trochę dziwniej, stworzyłem projekt przykładowych map, który jest dołączony do Dodatków do Usług Google Play i działa idealnie (ma oddzielny klucz API, btw).

Co mogłem tutaj zrobić źle? Czy przeoczyłem coś oczywistego?

+0

https://developers.google.com/maps/documentation/android/ – kongkea

+0

Jakiej wersji map Google używasz? Czy używasz klucza debugowania lub klucza wydania dla map? – MiStr

+6

@kongkea jest coś przydatnego, co zamierzasz ze swoim linkiem? Zamieszczanie linku do dokumentacji deweloperów map i mówienie nic więcej nie jest bezużyteczne. – dm78

Odpowiedz

19

Ten problem zwykle wynika z problemu z odniesieniem do biblioteki google-play-service. Spójrz na tym blogu pisałem o tym, jak zintegrować z Google Maps w aplikacji, zwłaszcza przez pierwsze 3 kroki:

Google Maps API V2

Inną przyczyną tego może być, że nie skonfigurowano API Google konsola prawidłowo, więc proponuję, aby przyjrzeć się tej instrukcji, a także:

Google Maps API V2 Key

kolejny powód, który może być przyczyną tego jest, jeśli masz jakiś problem w swoich uprawnień w pliku manifestu. Możesz również zapoznać się z pierwszym przewodnikiem dla potrzebnych uprawnień.

+5

Dziękuję. Najwyraźniej konflikt seryjny spowodował, że straciłem z mojego manifestu. – dm78

+0

Witaj, @DavidMays. –

+0

Tak ... błędem w READ_GSERVICES była moja śmierć ... dzięki !!! –

2

używać coś takiego:

  1. Aktualizacja usługi Google Play w SDK.

  2. Ręcznie odinstaluj aplikację z urządzenia i zrestartuj urządzenie. Próbowałem ją i jej będzie doskonale bro

też zrobić jedno dostać nowy klucz API do edytowanej nowego kodu SH1 od https://code.google.com/apis/console/

można uzyskać kod SH1 od Okno- preferencji Androida -buid

+0

Mam nadzieję, że twoja odpowiedź pomoże komuś innemu. W moim przypadku było to po prostu zezwolenie, które nie było już obecne. – dm78

+0

odinstalowanie aplikacji i ponownej instalacji działało dla mnie. – toobsco42

0

Udoskonalanie map Google to Googlemare. To zadziałało dla mnie:

-Update Usługi Google Play z Menedżerem Android -Użyj świeżego apiksza z: magazynem kluczy Sha1 (okno-> preferencje-> Android-> kompilacja) i nazwą pakietu projektu. Zrób to pod adresem: https://code.google.com/apis/console/

Ktoś zmienił nazwę paczki i foliował aplikację !!

Wypróbuj zanim zaczniesz potrzebować terapii złościowej dzięki mapom google.

Powiązane problemy