Ich versuche, eine Demo mit Google Maps Android v2 mit sehr einfacher Aktivität zu erstellen. Kopieren Sie einfach den Code von der Google-Seite: https://developers.google.com/maps/documentation/android/start#adding_the_api_key_to_your_application
für die Aktivität:
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);
}
}
für das Layout:
<?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"/>
Ich hatte einen API-Schlüssel gemäß Seite beantragt und meine androidmanifest.xml-Datei wie folgt geändert:
<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>
Ich verweise meine App auch auf Google-Play-Services_Lib in Eclipse.
Aber jedes Mal, Fehlerbericht in Logcat wie folgt:
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
Ich kenne den Grund dafür nicht.
Wenn ich google-play-services.jar zu meinem Projekt hinzufüge, wird ein weiterer Fehler gemeldet:
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)
Kann mir jemand dabei helfen?
Antworten:
In IntelliJ IDEA (aktualisiert für IntelliJ 12):
~/android-sdk/extras/google/google_play_services/libproject/google-play-services_lib/src/dummy.java
mitclass dummy {}
.~/android-sdk/extras/google/google_play_services/libproject/google-play-services_lib
~/android-sdk/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar
<Module source>
zum Ende der Liste zu gelangen.Sie können löschen,
dummy.java
wenn Sie möchten.Bearbeiten: Nachdem ich dies für eine Weile verwendet habe, habe ich festgestellt, dass es einen kleinen Fehler gibt. IDEA beschwert sich manchmal darüber , dass eine
.iml
Projektdatei imgoogle-play-services_lib
Verzeichnis nicht geöffnet werden kann , obwohl Sie nie gesagt haben, dass dort ein Projekt vorhanden ist. In diesem Fall wird das Problem durch erneutes Erstellen des Projekts behoben, zumindest bis es wieder auftritt.quelle
File > Import Module
Option in meinem nicht findenEclipse IDE
. Bitte helfen Sie mir ...Aktualisieren
Das folgende Snippet funktioniert an meinem Ende einwandfrei
SupportMapFragment
. Ich entscheide mich für die Verwendung .Vergessen Sie nicht, Ihrem Projekt etwas hinzuzufügen
google-play-services.jar
.MainActivity.java
manifest.xml
Hier ist das Ergebnis
Hoffe das wird helfen.
quelle
Versuchen Sie einfach, Ihr Layout durch Folgendes zu ersetzen:
Sie müssen das SupportMapFragment für API unter 11 verwenden!
Aurel
quelle
Ich hatte das gleiche Problem und brauchte zwei Tage, um eine Lösung zu finden, die für mich funktionierte:
google-play-services_lib
(Rechtsklick auf das Projekt löschen)MainActivity
in meinem Fall), falls Sie eines habenSie sollten so etwas sehen:
Hinweis: Sie sollten so etwas nicht haben (das Projekt sollte von Ihrem Arbeitsbereich aus verwiesen werden):
Ich denke, das Problem ist, dass zwei Projekte auf dieselbe Bibliothek verweisen
quelle
Versuche dies
http://developer.android.com/tools/projects/projects-eclipse.html#ReferencingLibraryProject
Ich habe gerade das Projekt von Google Services hinzugefügt und eine Referenz in meiner Projekteigenschaft-> Android hinzugefügt
quelle
Fügen Sie in Ihrem Projekt zwei JARs im libs-Verzeichnis hinzu. Folgen Sie den nachstehenden Informationen. Insbesondere denke ich, dass Sie:
Ich fand diesen zweiten Schritt notwendig, da ich beim Versuch, den Beispielcode zu verwenden, genau den gleichen Fehler wie Sie traf. Der erste Schritt war notwendig, um einen NoClassDefFoundError in com.google.android.gms.R $ zu vermeiden, der in meinem realen Projekt stilisiert werden kann.
Ich musste auch einen Clean Build durchführen und die App vom Gerät deinstallieren (von einem früheren Testversuch), bevor der Beispielcode funktionierte.
Vielen Dank für Ihre Hilfe.
quelle
Vielleicht müssen Sie dies hervorheben:
http://developer.android.com/google/play-services/setup.html
Sie müssen ein physisches Entwicklungsgerät bereitstellen, auf dem Sie Ihre App ausführen und debuggen können. Verwenden Sie keinen Emulator. Funktioniert nicht.
quelle
In Ihrer
MainActivity
(oder in jeder Aktivität, in der Sie die v2-Karte platzieren möchten) müssen Sie erweiternFragmentActivity
oderActivity
entweder Sie möchtenSupportMapFragment
oder nurMapFragment
. Verwenden Sie dieMapFragment
Klasse nur, wenn Sie auf API 12 und höher abzielen. Andernfalls verwenden SieSupportMapFragment
. Es ist ein subtiler Unterschied, aber es macht den Fehler.quelle
Da Google Map jetzt unter Fragmente eingeschlossen ist, erweitern Sie Ihre Aktivität von FragmetActivity und nicht nur von Activity. Stellen Sie sicher, dass Sie Fragment nur aus dem Support Package importieren , wenn Sie " supporrtMapFragment " verwenden .
quelle
SupportMapFragment
. Funktioniert nicht ohne ...In meinem Intellij Idea-Projekt musste ich dem Projekt beide hinzufügen: google-play-services_lib und google-play-services.jar. Fügen Sie im Projekt google-play-services_lib auch google-play-services.jar hinzu. Wenn Sie danach alle hier beschriebenen Schritte ausgeführt haben , sollte Ihre Anwendung funktionieren.
quelle
Es war ein wenig schwierig, weil es in der vorherigen API anders war, aber ich habe eine Lösung gefunden. Google sagt, was hier zu tun ist . Entsprechend der Frage benötigen wir
com.google.android.gms
Klassen, daher ist es notwendig, die einzurichtengoogle play services
, die nur eine Bibliothek ist, die wir wie diesen Link zu unserem Projekt hinzufügen müssen . Es ist sehr wichtig, die Kopie der Projektbibliothek zu importieren,google-play-services_lib
nicht die, die sich im SDK-Ordner befindet. Sobald dies erledigt ist, läuft das Tutorial von Google perfekt.quelle
Abgesehen von vielen der zuvor genannten Dinge war es mir wichtig, die .jar auch in Order and Export zu markieren. Soweit ich das beurteilen kann, wird es normalerweise nicht erwähnt und für mich war es entscheidend.
quelle
Beziehen Sie sich auf diesen Vorschlag: https://stackoverflow.com/a/20215481/3080835
Außerdem musste ich dies zum
Application
Element im Manifest hinzufügen :und es hat perfekt funktioniert.
quelle
Fügen Sie diese Abhängigkeit in build.gradle hinzu
compile 'com.google.android.gms:play-services:6.5.87
'Nun funktioniert das
quelle
Um die Drive-bezogenen Importe zu erledigen, benötigen Sie einige Gläser aus dem
Google Drive SDK
. Es gibt einige große, daher können Sie sie individuell hinzufügen, um sie an Ihre App anzupassen.Wenn das das nicht löst
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.
BEARBEITEN:
In diesem Fall wurden die folgenden Gläser benötigt:
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
quelle
Ich hatte das gleiche Problem auf meinem LG-E730 mit 2.3.4 Android. Der Fehler wird angezeigt, bevor ich den Google Play-Dienst auf meinem Telefon aktualisiert habe.
quelle
Vergessen Sie nicht, die google-play-services_lib zu erstellen! Aus diesem Grund wird "Google-Play konnte nicht gefunden werden ... apk" angezeigt. Für mich waren unter Eclipse keine weiteren Hacks erforderlich, sondern um das Projekt über das Android-Untermenü zu referenzieren, nicht über den Java-Erstellungspfad oder über Projektreferenzen oder was auch immer. Keine manuell platzierten Gläser, für mich wurde eigentlich nichts benötigt.
quelle
In Eclipse ist es erforderlich, ein separates Projekt für Google Play-Dienste zu erstellen und es als Bibliothek aus Ihrem Android-Projekt zu referenzieren, anstatt einfach das JAR hinzuzufügen. Auf meinem Computer habe ich das Eclipse-Projekt von Google Play Services direkt aus D: \ adt-bundle-windows-x86-20130219 \ sdk \ extras \ google \ google_play_services \ libproject \ google-play-services_lib importiert und auf Lib-Projekt gesetzt, damit ich könnte es aus meinem Android-Projekt referenzieren.
quelle
Es wird im selben Tutorial angegeben, dass
Ändern Sie einfach Ihre min SDK-Version auf 12 und es wird funktionieren
Haven hat Aurels Problemumgehung für ältere Versionen der API noch nicht ausprobiert.
quelle
Ich denke, es ist erwähnenswert (nachdem ich über eine Stunde damit verbracht habe, mir die Haare auszureißen), dass Sie FragmentActivity nicht verwenden können, wenn Sie MapFragment verwenden (SupportMapFragment funktioniert in dieser Umgebung einwandfrei). Ich war gerade bereit, es aufzugeben.
quelle
Erster Schritt http://developer.android.com/tools/projects/projects-eclipse.html#ReferencingLibraryProject Zweiter Schritt http://developer.android.com/google/play-services/setup.html Auf dieser Seite befindet sich eine HINWEIS, aber wir haben nicht aufgepasst
Hinweis: Sie sollten auf eine Kopie der Bibliothek verweisen, die Sie in Ihren Quellbaum kopiert haben. Sie sollten nicht auf die Bibliothek aus dem Android SDK-Verzeichnis verweisen.
Aber ich denke, es ist keine gute Art der Dokumentation :)
quelle
Dies könnte einigen helfen. Ich hatte zwei Projekte, eines davon war eine Kopie der Demo von Google und das hat gut funktioniert. Ein anderes habe ich in ein bestehendes Projekt kopiert und konnte es überhaupt nicht zum Laufen bringen. Und in der zweiten fehlgeschlagenen bekam ich die oben beschriebene Fehlermeldung.
Mein Problem war darauf zurückzuführen, dass eine Bibliothek nicht aktiviert wurde, obwohl ich sie neu erstellt, mehrmals importiert usw. habe. Klicken Sie mit der rechten Maustaste auf das Projekt -> Eigenschaften -> Java-Erstellungspfad -> Registerkarte Bestellen und Exportieren. Bei dem fehlgeschlagenen Projekt wurde die Registerkarte "Private Bibliotheken für Android" deaktiviert.
Sobald ich es aktiviert habe, hat das Projekt gut funktioniert.
quelle
Ich hatte alles, was alle oben sagten, und löste den Fehler, indem ich einfach die
super.onCreate(savedInstanceState);
erste Anweisung in der oncreate-Methode aufrief. bevor es letzte Zeile in der Methode war. : | den ganzen Tag verschwendet.quelle
Ich habe dieses Problem. Ich aktualisiere nur die Google Play-Dienste und stelle sicher, dass Sie das Google-Play-Service-Lib-Projekt als Abhängigkeit hinzufügen. Es funktioniert jetzt ohne Codeänderung, aber ich erhalte immer noch "Die Ressourcen der Google Play-Dienste wurden nicht gefunden." Überprüfen Sie Ihre Projektkonfiguration, um sicherzustellen, dass die Ressourcen enthalten sind. " Dies geschieht jedoch nur, wenn Sie setMyLocationEnabled (true) festgelegt haben. Weiß jemand warum?
quelle
Ich erhalte nicht die richtige Lösung, aber ich löse sie, nachdem ich folgende Schritte ausgeführt habe: - Aktivieren Sie
beim Importieren von google-play-services_lib
die Option "Projekte in Arbeitsbereich kopieren". - Stellen
Sie die minSdkVersion nicht unter 13 ein. - Wenn Sie einen Fehler mit dem Thema erhalten, versuchen Sie es Ändern Ihres Layout-Themas in ein beliebiges System-Design
- Erstellen Sie Ihr Projekt von Grund auf neu oder setzen Sie alles zurück, wenn Sie es von irgendwoher erhalten
quelle
Ich habe das gleiche Problem und habe gerade Play Services vom SDK installiert und alle Probleme fliegen weg.
quelle
Ich habe in der Aktivität geschrieben
import com.google.android.gms.maps.SupportMapFragment;
und Eclipse gab mir das rote Symbol> Klicken> Projekt-Setup korrigieren ..> Archiv hinzufügen google-play-services.jar
Und schließlich hat es funktioniert !!
quelle
Fügen Sie Ihrem Projekt Google Play Services hinzu
So stellen Sie die Google Play Services-APIs Ihrer App zur Verfügung:
Befolgen Sie die Schritte in diesem Link: http://developer.android.com/google/play-services/setup.html#Setup
quelle
Ich habe dieses Problem bei der Verwendung von Android SDK für x86 auf einem 64-Bit-Computer von Windows 7 festgestellt. Ich habe die 64-Bit-Version des Android SDK heruntergeladen und Eclipse unter Fenster> Einstellungen> Android> SDK-Speicherort angezeigt, und das Problem trat nicht mehr auf.
quelle
Bitte aufmerksam lesen
Hinweis - Fügen Sie nicht zwei Schlüssel zur Manifestdatei hinzu, und entfernen Sie den Kartenschlüssel
Fügen Sie diesen Code hinzu.
quelle