Nie można utworzyć instancji android.gms.maps.MapFragment

82

Próbuję zrobić demo z mapami google android v2 z bardzo prostą czynnością, po prostu skopiuj kod ze strony google: https://developers.google.com/maps/documentation/android/start#adding_the_api_key_to_your_application

za działalność:

package com.example.mapdemo;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

dla układu:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.MapFragment"/>

Wystąpiłem o klucz api zgodnie ze stroną i zmodyfikowałem mój plik androidmanifest.xml, tak jak to:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wenhai.driverschool"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <uses-permission android:name="android.permission.INTERNET" />

    <!-- add for map2 -->
    <permission
        android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.example.mapdemo.permission.MAPS_RECEIVE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <!-- External storage for caching. -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <!-- Maps API needs OpenGL ES 2.0. -->
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyDVAF4WaVSVRDKJx87It8OSFP5txQcPabc" />

        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Odwołuję się również do mojej aplikacji do google-play-services_lib w zaćmieniu.

ale za każdym razem raport o błędzie w logcatie wygląda tak:

2-05 16:22:53.609: E/AndroidRuntime(21623): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wenhai.driverschool/com.wenhai.driverschool.MainActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.ActivityThread.access$600(ActivityThread.java:127)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.os.Looper.loop(Looper.java:137)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.ActivityThread.main(ActivityThread.java:4441)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at java.lang.reflect.Method.invokeNative(Native Method)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at java.lang.reflect.Method.invoke(Method.java:511)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at dalvik.system.NativeStart.main(Native Method)
12-05 16:22:53.609: E/AndroidRuntime(21623): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:255)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.Activity.setContentView(Activity.java:1835)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at com.wenhai.driverschool.MainActivity.onCreate(MainActivity.java:11)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.Activity.performCreate(Activity.java:4465)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
12-05 16:22:53.609: E/AndroidRuntime(21623):    ... 11 more
12-05 16:22:53.609: E/AndroidRuntime(21623): Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.android.gms.maps.MapFragment: make sure class name exists, is public, and has an empty constructor that is public
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.Fragment.instantiate(Fragment.java:581)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.Fragment.instantiate(Fragment.java:549)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.Activity.onCreateView(Activity.java:4235)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:673)
12-05 16:22:53.609: E/AndroidRuntime(21623):    ... 20 more
12-05 16:22:53.609: E/AndroidRuntime(21623): Caused by: java.lang.ClassNotFoundException: com.google.android.gms.maps.MapFragment
12-05 16:22:53.609: E/AndroidRuntime(21623):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.Fragment.instantiate(Fragment.java:571)
12-05 16:22:53.609: E/AndroidRuntime(21623):    ... 23 more

Nie znam powodu.

Jeśli dodam google-play-services.jar do mojego projektu, zgłosi kolejny błąd:

12-05 16:34:23.269: E/AndroidRuntime(22638): FATAL EXCEPTION: main
12-05 16:34:23.269: E/AndroidRuntime(22638): java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
12-05 16:34:23.269: E/AndroidRuntime(22638):    at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at com.google.android.gms.maps.MapFragment.onInflate(Unknown Source)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.Activity.onCreateView(Activity.java:4242)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:673)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:255)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.Activity.setContentView(Activity.java:1835)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at com.wenhai.driverschool.MainActivity.onCreate(MainActivity.java:11)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.Activity.performCreate(Activity.java:4465)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.ActivityThread.access$600(ActivityThread.java:127)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.os.Looper.loop(Looper.java:137)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.ActivityThread.main(ActivityThread.java:4441)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at java.lang.reflect.Method.invokeNative(Native Method)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at java.lang.reflect.Method.invoke(Method.java:511)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at dalvik.system.NativeStart.main(Native Method)

Czy ktoś może mi w tym pomóc?

mmm2006
źródło
2
Otrzymuję ten sam błąd z MapView. Dodałem bibliotekę i zrobiłem wszystko, co opisano na tej stronie developers.google.com/maps/documentation/android/start, ale to wszystko było dla mnie bezużyteczne.
skoczek0k
1
Ten sam błąd ... dowolne rozwiązanie ...
nilkash
1
Mam ten sam błąd i nie mogę jeszcze znaleźć dobrego rozwiązania :(
Ricardo Otero,
Aby zobaczyć te kroki, jak myślę, że jest to jeszcze nierozwiązane techhomeblog.wordpress.com/2013/02/23/…
Tofeeq Ahmad
Spróbuj kliknąć prawym przyciskiem myszy projekt w Eclipse, wybierz Narzędzia Android> Dodaj bibliotekę wsparcia. W moim przypadku była to nieaktualna wersja pobrana z ActionBarSherlock.
IgorGanapolsky

Odpowiedzi:

86

W IntelliJ IDEA (zaktualizowano dla IntelliJ 12):

  1. Utwórz plik ~/android-sdk/extras/google/google_play_services/libproject/google-play-services_lib/src/dummy.javazawierający class dummy {}.
  2. Plik-> Importuj moduł-> ~/android-sdk/extras/google/google_play_services/libproject/google-play-services_lib
  3. Utwórz moduł z istniejących źródeł
  4. Dalej-> Dalej-> Dalej-> Dalej-> Zakończ
  5. Plik-> Struktura projektu-> Moduły-> Twoja aplikacja
  6. +-> Zależność modułu-> Google-play-services_lib ( +przycisk znajduje się w prawym górnym rogu okna dialogowego).
  7. +-> Jars lub katalogi->~/android-sdk/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar
  8. Użyj strzałek up/, downaby przejść <Module source>na dół listy.

Możesz usunąć, dummy.javajeśli chcesz.

Edycja: Po używaniu tego przez jakiś czas odkryłem, że jest mała wada / błąd. IDEA czasami narzeka, że ​​nie jest w stanie otworzyć .imlpliku projektu w google-play-services_libkatalogu, mimo że nigdy nie powiedziałeś, że jest tam projekt. Jeśli tak się stanie, odbudowanie projektu rozwiązuje problem, przynajmniej do czasu jego powrotu.

Timmmm
źródło
3
cześć, nie mogę znaleźć File > Import Moduleopcji w moim Eclipse IDE. Proszę, pomóż mi ...
Rahmathullah M
To jest dla lepszego IDE „IntelliJ IDEA”.
Timmmm
2
Dzięki za odpowiedź! Ale wystarczyło, że dodałem w projekcie zależność modułu ORAZ jar i wszystko działało!
łomża
W kroku 6 w Intellij 12 przycisk + znajduje się w lewym dolnym rogu poniżej trzeciego okienka.
Nick
3
Nie musisz już dodawać pliku Dummy, ponieważ biblioteka usług Google Play została zaktualizowana o „oficjalny plik dummy”, aby obsługiwać „niektóre IDE” (tj. Naprawiono IntelliJ i Android Studio).
Guardius
33

Aktualizacja

Postępuj zgodnie z fragmentami kodu Commonsware MapV2, aby uzyskać lepsze zrozumienie.

(Występuje w wydaniu Omnibus)

https://github.com/commonsguy/cw-omnibus/tree/master/MapsV2

Poniższy fragment działa dobrze na moim końcu SupportMapFragment.

Nie zapomnij dodać google-play-services.jar do swojego projektu.

MainActivity.java

package com.example.newmapview;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.SupportMapFragment;

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SupportMapFragment fragment = new SupportMapFragment();
        getSupportFragmentManager().beginTransaction()
                .add(android.R.id.content, fragment).commit();
    }
}

manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.newmapview"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

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

    <uses-permission android:name="com.example.newmapview.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.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.newmapview.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

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

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

</manifest>

Oto wynik

wprowadź opis obrazu tutaj Mam nadzieję, że to pomoże.

Vipul
źródło
cześć, Vipul Shah, dzięki. Podoba mi się wiadomość od Concole: [2012-12-06 10:20:26 - google-play-services_lib] Nie można znaleźć google-play-services_lib.apk! Nie wiem, czy brak tego apk prowadzi do mojego błędu. Czy możesz mi powiedzieć, jak odwołać się do google-play-services.jar. po prostu dodaj jak poniżej link: developer.android.com/intl/zh-CN/tools/projects/… . lub dodaj go w eclipse jak poniżej: Propertyes-> java Build Path-> Projects, dodaj projekt google-play-services_lib. który po twojej stronie? dzięki.
mmm2006
@ mmm2006 Obawiam się, że możesz uruchomić tę aplikację na emulatorze Androida.Nie jestem pewien, ale możesz napotkać ten błąd, ponieważ na emulatorze nie ma aplikacji Sklep Play. Spróbuj na rzeczywistym urządzeniu.
Vipul
W rzeczywistości uruchamiam go w moim telefonie. telefon Sony.
mmm2006
Cześć Vipul, czy możesz mi powiedzieć, jak mogę pokazać moje znaczniki na mapie za pomocą MapFragment? Mam listę szerokości i długości geograficznych, chcę pokazać je na mapie, próbowałem MapView, ale nie działało dla mnie, więc nie mogę użyć ItemizedOverlay, MapFragment działało, więc jak wyświetlić wiele znaczników na MapFragment. Jeśli to możliwe, podaj link z działającym kodem.
Shrikant
@VipulShah: jesteś rock. Czy możesz mi powiedzieć, dlaczego pojawił się ten błąd, ponieważ zanim jakiś czas zadziała, opracowałem pewne tutotial ---> dj-android.blogspot.in/2013/02/ ... teraz ten sam kod nie działa.
Dhaval Parmar
23

Po prostu spróbuj zamienić układ na:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/map"
       android:name="com.google.android.gms.maps.SupportMapFragment"
       android:layout_width="wrap_content"
       android:layout_height="match_parent" />

Musisz użyć SupportMapFragment dla API poniżej 11 lat!

Aurel

Aurel
źródło
3
przepraszam za to, ale to też nie może działać na moim miejscu. zgłoś błąd tym razem: Spowodowane przez: android.app.Fragment $ InstantiationException: Nie można utworzyć instancji fragmentu com.google.android.gms.maps.SupportMapFragment: upewnij się, że nazwa klasy istnieje, jest publiczna i ma pusty konstruktor, który jest publiczny. Mogę znaleźć element SupportMapFragment w pliku jar, ale nie działa. nie znam powodu.
mmm2006
Hum, wydaje się, że musisz zrobić coś takiego: 1. Pobierz Google Play Services SDK na Android SDK Mananger. 2. Zaimportuj bibliotekę projektu w Eclipse. 3. Dodaj bibliotekę do swojego projektu. 4. Upewnij się, że w projekcie znajduje się plik android-support-v4.jar (dostępny również w Android SDK Manager). 5. Utwórz fragment i dodaj nazwę ('class = "com.google.android.gms.maps.MapFragment" />' dla SDK> = 11 i 'class = "com.google.android.gms.maps.MapFragment „/>” dla SDK <11). 6. Nie zapomnij wypróbować przykładowego kodu na urządzeniu (Twoja aplikacja wymaga Google Play!)
Aurel,
ok, stwierdziłem, że muszę postępować zgodnie z tym przewodnikiem, aby polecić usługę Google Play. developer.android.com/intl/zh-CN/tools/projects/… . ale przykład udowodniony przez Google może już działać. :(
mmm2006
masz jakiś pomysł, jaki jest widok równoważny Framgament, aby umieścić go w pliku xml fragmentów?
Harsha MV
1
@ mmm2006: musisz rozszerzyć „FragmentActivity”, a nie „Activity”, to powinno działać i nie będzie zgłaszać wyjątku ..
Veer
17

Napotkałem ten sam problem i zajęło mi kilka dni, aby znaleźć rozwiązanie, które działało dla mnie:

  1. Usuń projekt google-play-services_lib(kliknij prawym przyciskiem myszy projekt usuń)
  2. Usuń projekt zawierający demo map Google ( MainActivityw moim przypadku), jeśli taki masz
  3. Skopiuj projekt google-play-services_lib (extras \ google \ google_play_services \ libproject \ google-play-services_lib) do swojego obszaru roboczego, a następnie zaimportuj go jako projekt ogólny (Plik-> import-> istniejące projekty do obszaru roboczego)
  4. Kliknij prawym przyciskiem myszy swój projekt (w którym chcesz załadować mapę) -> Android -> dodaj (w bibliotece) google-play-services_lib

Powinieneś zobaczyć coś takiego:

zwróć uwagę na

Uwaga: nie powinieneś mieć czegoś takiego (projekt powinien być skierowany z twojego obszaru roboczego):

wprowadź opis obrazu tutaj

Myślę, że problem polega na tym, że wszystkie projekty odwołują się do tej samej biblioteki

zizoujab
źródło
Dodawałem
10

Spróbuj tego

http://developer.android.com/tools/projects/projects-eclipse.html#ReferencingLibraryProject

Właśnie dodałem projekt usług Google i dodałem odniesienie do właściwości mojego projektu -> Android

Guilherme Muniz
źródło
2
To była dla mnie krytyczna poprawka, żadna z powyższych odpowiedzi nie pomogła. Różnica jest w rzeczywistości dość subtelna - dodawałem go jako projekt zależny przez „Ścieżkę budowania Java”, podczas gdy w rzeczywistości powinienem był to robić przez menu „Android”. Dodałem te informacje do jednej z moich innych odpowiedzi: stackoverflow.com/questions/13733911/…
Dan J,
8
  1. Do tej pory demo może działać, kliknij ten link :
  2. Na przykład demo, to też może działać:

Dodaj dwa pliki jar w katalogu libs w swoim projekcie. Postępuj zgodnie z poniższymi informacjami. W szczególności myślę, że musisz:

  • Zaimportuj rzeczywiste źródło dla projektu „google-play-services_lib” i połącz je jako bibliotekę Androida.
    • Zrób to poprzez Projekt -> Właściwości -> Android -> Biblioteka, Dodaj -> google-play-services_lib (możesz kliknąć prawym przyciskiem myszy na projekt i wybrać Właściwości, a następnie wybrać Android).
    • Nie dodawaj go jako projektu zależnego za pośrednictwem „Ścieżki budowania języka Java” do swojego projektu, który nie zadziałał.
  • Dodaj pliki google-play-services.jar i android-support-v4.jar do folderu „libs” w przykładowym projekcie i dodaj je jako „Zewnętrzne zewnętrzne pliki JAR” w „Ścieżka budowania -> Konfiguruj ścieżkę kompilacji -> Biblioteki” .

Okazało się, że ten drugi krok był konieczny, ponieważ napotkałem dokładnie ten sam błąd, co ty, próbując użyć przykładowego kodu. Pierwszy krok był konieczny, aby uniknąć stylu NoClassDefFoundError w com.google.android.gms.R $ w moim prawdziwym projekcie.

Musiałem również wykonać czystą kompilację i odinstalować aplikację z urządzenia (z wcześniejszej próby testowej), zanim przykładowy kod zadziała.

bardzo dziękuję za pomoc.

mmm2006
źródło
3

Może musisz to podkreślić:

Uwaga: usługi Google Play nie są obsługiwane w emulatorze Androida - aby programować z wykorzystaniem interfejsów API, musisz zapewnić urządzenie programistyczne, takie jak telefon lub tablet z Androidem.

http://developer.android.com/google/play-services/setup.html

Musisz zapewnić fizyczne urządzenie programistyczne, na którym możesz uruchamiać i debugować swoją aplikację. Nie używaj emulatora. Nie będzie działać.

kameleon
źródło
3
O MÓJ BOŻE! Dlaczego ta notatka jest tak mała na stronie głównej i nie jest duża czerwona na każdej stronie? Po prostu pieprzyłem prawie cały dzień, próbując to uruchomić !!!!
shmoula,
Usługi Play są teraz dostępne na emulatorach z systemem Android w wersji 4.2.2 lub nowszej.
Brian White
2

W swoim MainActivity(lub w każdym działaniu, które chcesz umieścić mapę v2) musisz rozszerzyć FragmentActivitylub Activityalbo chcesz użyć, SupportMapFragmentalbo po prostu MapFragment. Użyj MapFragmentklasy tylko wtedy, gdy kierujesz na interfejs API 12 lub nowszy. W przeciwnym razie użyj SupportMapFragment. To subtelna różnica, ale powoduje błąd.

Sheddad
źródło
2

Ponieważ mapa Google jest teraz opakowana w Fragmenty, rozszerz swoją aktywność z FragmetActivity, a nie tylko z Activity i upewnij się, że jeśli używasz „ supporrtMapFragment ”, to importujesz fragment tylko z pakietu wsparcia .

Pratap Singh
źródło
Google powinien naprawdę naprawić podstawowy przykład, aby użyć SupportMapFragment. Bez niego nie działa ...
Muzikant
1

W moim projekcie Intellij Idea musiałem dodać do projektu oba: google-play-services_lib i google-play-services.jar. W projekcie google-play-services_lib dodaj też google-play-services.jar. Po tym, jeśli zrobiłeś wszystko, co tutaj opisano , twoja aplikacja powinna działać.

skoczek0k
źródło
Jakiej kategorii używasz dla katalogu (klasy, katalog jar, źródła itp.)?
Timmmm
1
W Intellij Idea dodaję google-play-services_lib jak moduł. Co więcej, Intellij Idea nie rozpoznaje go jako modułu, ponieważ folder src jest pusty. Należy dodać plik java z dowolnym kodem do folderu src, a następnie utworzyć moduł z istniejących źródeł i dodać go do projektu w strukturze projektu. Następnie wyczyść plik java.
skoczek0k
1

Było to trochę trudne, ponieważ w poprzednim API było inne, ale znalazłem rozwiązanie. Google mówi, co tu robić ; zgodnie z pytaniem potrzebujemy com.google.android.gmsklas, więc konieczne jest skonfigurowanie google play servicesbiblioteki, która jest tylko biblioteką, którą musimy dodać do naszego projektu, jak ten link . Bardzo ważne jest, aby zaimportować kopię biblioteki projektu, a google-play-services_libnie tę, która znajduje się w folderze sdk. Gdy to zrobisz, samouczek od Google idzie idealnie.

joseph.dev89
źródło
również its ważne też, co api używasz, API 10 lub mniej wsparcia wymagają biblioteki developer.android.com/tools/extras/support-library.html dokładnie w którym jest pan błąd?
joseph.dev89
1

Oprócz wielu wymienionych wcześniej rzeczy ważne było dla mnie oznaczenie pliku .jar również w dziale Order i Export. O ile wiem, zwykle się o tym nie wspomina i dla mnie było to kluczowe.

Oznacz bibliotekę w sekcji Zamów i eksportuj

AlvaroSantisteban
źródło
1

odnoszą się do tej sugestii: https://stackoverflow.com/a/20215481/3080835

musiałem też dodać to do Applicationelementu w Manifeście:

<meta-data 
           android:name="com.google.android.gms.version" 
           android:value="@integer/google_play_services_version" />

i działało idealnie.

user3080835
źródło
1

Dodaj tę zależność w pliku build.gradle

compile 'com.google.android.gms:play-services:6.5.87'

Teraz to działa

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_width="match_parent"
        android:layout_height="388dp"
        android:layout_weight="0.40" />
</LinearLayout>
yubaraj poudel
źródło
0

Aby zająć się importem związanym z Dyskiem, potrzebujesz kilku słoików z Google Drive SDK . Jest kilka dużych, więc możesz dodać je indywidualnie, aby pasowały do ​​Twojej aplikacji.

Jeśli to nie rozwiąże problemu com.google.android.gms.* imports,the Google Play Services add-on needs to be installed (from Extras -> Google Play Services in the SDK Manager) and google-play-services.jar needs to be added to your build path.

EDYTOWAĆ:

W tym przypadku potrzebne były następujące słoiki:

google-api-services-drive-v2-rev1-1.7.2-beta.jar

google-http-client-1.10.3-beta.jar

google-http-client-android2-1.10.3-beta.jar

google-oauth-client-1.10.1-beta.jar

google-api-client-android2-1.10.3-beta.jar

google-api-client-1.10.3-beta.jar

Bhavesh Patadiya
źródło
0

Miałem ten sam problem na moim LG-E730 z Androidem 2.3.4. Błąd pojawia się, zanim zaktualizuję usługę Google Play na moim telefonie.

Leniwa broda
źródło
0

Nie zapomnij zbudować biblioteki google-play-services_lib !! Dlatego wyświetla się komunikat „Nie można znaleźć Google Play .... apk”. Dla mnie w Eclipse nie były potrzebne żadne inne hacki, ale odwoływanie się do projektu z podmenu Androida, a nie ze ścieżki kompilacji Java, odniesień do projektów lub czegokolwiek innego. Żadnych ręcznie umieszczanych słoików, nic nie było mi potrzebne.

annouk
źródło
0

W Eclipse konieczne jest utworzenie osobnego projektu dla usług Google Play i odniesienie do niego jako biblioteki z projektu Android zamiast po prostu dodawać do niego jar. Na moim komputerze zaimportowałem projekt Eclipse usług Google Play bezpośrednio z D: \ adt-bundle-windows-x86-20130219 \ sdk \ extras \ google \ google_play_services \ libproject \ google-play-services_lib i ustawiłem go na projekt Lib, więc może odwołać się do niego z mojego projektu Android.

Piovezan
źródło
0

Jest to powiedziane w tym samym samouczku

Pamiętaj, że poniższy kod jest przydatny tylko do testowania ustawień w aplikacji przeznaczonej dla interfejsu API systemu Android w wersji 12 lub nowszej

Po prostu zmień wersję min SDK na 12 i będzie działać

<uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

Haven wypróbował już obejście Aurela dla starszych wersji interfejsu API.

ericn
źródło
0

Myślę, że warto wspomnieć (po ponad godzinie wyrywania włosów), że jeśli używasz MapFragment, nie możesz używać FragmentActivity (SupportMapFragment będzie działał dobrze w tym środowisku). Byłem prawie gotowy, aby z tego zrezygnować.

nicmoon
źródło
0

Może to być pomocne dla niektórych. Miałem dwa projekty, z których jeden był kopią wersji demonstracyjnej Google i działał dobrze. Inny skopiowałem do istniejącego projektu i nie mogłem go w ogóle uruchomić. A w drugim nieudanym otrzymałem opisany powyżej komunikat o błędzie.

Mój problem był spowodowany tym, że biblioteka nie była włączona, mimo że przebudowywałem, importowałem wiele razy itp. Kliknij prawym przyciskiem myszy projekt -> Właściwości -> Ścieżka budowania Java -> zakładka Zamów i eksportuj. W projekcie, który uległ awarii, odznaczono kartę „Prywatne biblioteki systemu Android”.

Po włączeniu projekt działał dobrze.

dubman23
źródło
0

miałem wszystko, co mówili wszyscy powyżej i rozwiązałem błąd, po prostu wywołując super.onCreate(savedInstanceState);pierwszą instrukcję w metodzie oncreate; zanim była ostatnią linią w metodzie. : | zmarnowany cały dzień.

Awais
źródło
0

Mam ten problem, po prostu aktualizuję usługi Google Play i upewniam się, że dodajesz projekt google-play-service-lib jako zależność, działa teraz bez zmiany kodu, ale nadal otrzymuję komunikat „Nie znaleziono zasobów usług Google Play . Sprawdź konfigurację projektu, aby upewnić się, że zasoby są uwzględnione. " ale dzieje się tak tylko wtedy, gdy ustawisz setMyLocationEnabled (true), ktoś wie dlaczego?

eOnOe
źródło
0

Nie otrzymuję prawdziwego rozwiązania, ale rozwiązuję je po wykonaniu następujących czynności:
- Zaznacz „Kopiuj projekty do obszaru roboczego” podczas importowania google-play-services_lib
- Nie ustawiaj minSdkVersion poniżej 13
- Jeśli pojawia się błąd z motywem, spróbuj zmiana motywu układu na dowolny motyw systemowy
- odtwórz projekt od zera lub przywróć wszystko, jeśli masz to skądś

Van Hung
źródło
0

Mam ten sam problem i po prostu zainstalowałem usługi Play z SDK i wszystkie problemy znikają.

Harsha
źródło
0

Napisałem w działaniu
import com.google.android.gms.maps.SupportMapFragment;

a Eclipse dało mi czerwoną ikonę> kliknij> napraw konfigurację projektu ...> dodaj archiwum google-play-services.jar

I w końcu zadziałało !!

Holyna
źródło
0

Napotkałem ten problem podczas korzystania z zestawu SDK systemu Android dla x86 na komputerze z 64-bitowym systemem Windows 7. Pobrałem 64-bitową wersję Android SDK, sprawiłem, że Eclipse zobaczyło ją w oknie> Preferencje> Android> lokalizacja SDK i problem przestał występować.

Piovezan
źródło
0

Proszę czytać uważnie

Jeśli wszystko działa tak samo jak kod Google, sprawdź plik manifestu w moim przypadku dodałem klucz geograficzny i klucz mapy, dlatego występuje wyjątek,

Uwaga - nie dodawaj dwóch kluczy w pliku manifestu usuń klucz mapy

meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key"/>

dodaj ten kod.

 <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/auto_location"/>

 <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"/>
Yogesh Rathi
źródło