J'ai essayé de créer un exemple de projet à l'aide de Google Map, mais je n'ai pas pu. Aidez-moi s'il vous plaît!
Appareil de test: Android 4.0.4
Message d'erreur :
12-29 23:45:32.605: E/AndroidRuntime(9437): FATAL EXCEPTION: main
12-29 23:45:32.605: E/AndroidRuntime(9437):
Java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example.test_googlemap/com.example.test_googlemap.MainActivity}:
Android.view.InflateException: Binary XML file line #2: Error
inflating class fragment 12-29 23:45:32.605: E/AndroidRuntime(9437):
Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1968)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:1993)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.app.ActivityThread.access$600(ActivityThread.Java:127) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1159)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.os.Handler.dispatchMessage(Handler.Java:99) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.os.Looper.loop(Looper.Java:137) 12-29 23:45:32.605:
E/AndroidRuntime(9437): at
Android.app.ActivityThread.main(ActivityThread.Java:4507) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Java.lang.reflect.Method.invokeNative(Native Method) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Java.lang.reflect.Method.invoke(Method.Java:511) 12-29 23:45:32.605:
E/AndroidRuntime(9437): at
com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:790)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:557) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
dalvik.system.NativeStart.main(Native Method) 12-29 23:45:32.605:
E/AndroidRuntime(9437): Caused by: Android.view.InflateException:
Binary XML file line #2: Error inflating class fragment 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:697)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.view.LayoutInflater.inflate(LayoutInflater.Java:466) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.view.LayoutInflater.inflate(LayoutInflater.Java:396) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.view.LayoutInflater.inflate(LayoutInflater.Java:352) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:271)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.app.Activity.setContentView(Activity.Java:1835) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
com.example.test_googlemap.MainActivity.onCreate(MainActivity.Java:11)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.app.Activity.performCreate(Activity.Java:4465) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1052)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1932)
12-29 23:45:32.605: E/AndroidRuntime(9437): ... 11 more 12-29
23:45:32.605: E/AndroidRuntime(9437): Caused by:
Java.lang.ClassCastException: com.google.Android.gms.maps.MapFragment
cannot be cast to Android.support.v4.app.Fragment 12-29 23:45:32.605:
E/AndroidRuntime(9437): at
Android.support.v4.app.Fragment.instantiate(Fragment.Java:394) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.support.v4.app.Fragment.instantiate(Fragment.Java:369) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.Java:272)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:669)
12-29 23:45:32.605: E/AndroidRuntime(9437): ... 20 more
Code source :
package com.example.test_googlemap;
import Android.os.Bundle;
import Android.support.v4.app.FragmentActivity;
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
activity_main.xml:
<?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"/>
Manifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.test_googlemap"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-sdk
Android:minSdkVersion="3"
Android:targetSdkVersion="15" />
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name="com.example.test_googlemap.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="I removed it!"/>
</application>
<permission
Android:name="com.example.Test_GoogleMap.permission.MAPS_RECEIVE"
Android:protectionLevel="signature"/>
<uses-permission Android:name="com.example.Test_GoogleMap.permission.MAPS_RECEIVE"/>
<uses-permission Android:name="Android.permission.INTERNET"/>
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION"/>
<uses-feature
Android:glEsVersion="0x00020000"
Android:required="true"/>
</manifest>
Vous étendez FragmentActivity
, indiquant que vous essayez d'utiliser le Android Support du package de fragments de support. Cependant, votre élément <fragment>
Fait référence à MapFragment
, qui correspond à l'édition native de l'API niveau 11 des fragments.
Remplacez MapFragment
par SupportMapFragment
, et cela devrait éliminer ce plantage spécifique.
J'ai eu le même problème et j'ai fait l'erreur de n'ajouter qu'une des 2 balises suivantes. Notez qu'il vous manque également l'un de ces deux
<meta-data Android:name="com.google.Android.maps.v2.API_KEY" Android:value="<YOUR VALUE>"/> <meta-data Android:name="com.google.Android.gms.version" Android:value="@integer/google_play_services_version" />
L'erreur réelle est vraiment trompeuse, car vous pourriez penser à un problème d'interface utilisateur de niveau API.
Parfois, vous utilisez les deux -
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="<YOUR VALUE>"
/>
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="<YOUR VALUE>"
/>
Assurez-vous de ne pas utiliser les deux ... si vous avez besoin d'emplacement, de lieux et de cartes, utilisez geo.API_KEY et si vous avez besoin de lieux et de cartes, utilisez maps.v2.API_KEY
La réponse acceptée est une information correcte mais significative que je partage avec vous, peut-être toute personne confrontée au même problème que moi
Si tout se réveille comme le code Google, veuillez vérifier le fichier manifeste dans mon cas, j'ai ajouté une clé géographique et une clé de carte, c'est pourquoi une exception se produit,
Remarque - n'ajoutez pas deux clés dans le fichier manifeste supprimez la clé de la carte
meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="@string/google_maps_key"/>
ci-dessus et ajoutez ce code.
<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"/>
Ce problème se produit également lorsqu'il n'est pas en mesure de gonfler la classe Fragment mentionnée dans activity_main.xml (ou le fichier XML présent sous res/layout), en raison d'une incompatibilité de version SDK dans le fichier andriod_manifest.xml.
Les versions correctes pour les niveaux du SDK pour obtenir la carte sur un émulateur sont les suivantes:
<uses-sdk
Android:minSdkVersion="11"
Android:targetSdkVersion="21" />
Dans mon cas, j'ai dû faire deux corrections pour faire disparaître cette exception.
Même s'il s'agit d'une question déjà répondue, cette erreur peut également apparaître si vous appelez le super.onCreateView
dans votre fragment. Il plantera au moment de l'exécution.
Assurez-vous d'avoir remplacé la méthode onCreateView
et gonflé votre mise en page:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_fragment, container, false);
return view;
}
Ce défaut a été résolu dans la bibliothèque des services de jeux v9.0.0. https://code.google.com/p/gmaps-api-issues/issues/detail?id=9021#makechanges
Utilisez l'autorisation Internet pour être l'enfant direct du fichier manifeste .. Comme ci-dessous et essayez ..
Vous devez également disposer des éléments suivants pour utiliser la carte:
1.Doit étendre Map activity
dans votre dossier d'activité
2.Doit avoir une clé API, je n'ai vu aucune clé dans votre code.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.test_googlemap"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-permission Android:name="Android.permission.INTERNET"/>
<uses-sdk
Android:minSdkVersion="3"
Android:targetSdkVersion="15" />