Je développe une application Android et je cherchais dans Google Adresses certaines fonctionnalités de l'application. Google a récemment publié la fonctionnalité PlacePicker, ce que j'utilise. J'ai suivi les instructions de Google et les guides de démarrage rapide du "T". La fonctionnalité fonctionnait à merveille il y a trois heures et maintenant, lorsque je vais la tester, elle se lance puis se ferme immédiatement sans erreur dans la trace de la pile. Voici comment j'utilise le code:
Ceci est dans un fragment.
// The Location Selection from Google Place Picker
where.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
launchPlace();
} catch (GooglePlayServicesNotAvailableException | GooglePlayServicesRepairableException e) {
e.printStackTrace();
}
}
});
C'est dans les fragments onCreateView.
La méthode launchPlace () est définie comme suit.
// Start Google Place Picker Code **************************************************************
public void launchPlace() throws GooglePlayServicesNotAvailableException,
GooglePlayServicesRepairableException {
PLACE_PICKER_REQUEST = 1;
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
Context context = getActivity().getApplicationContext();
startActivityForResult(builder.build(context), PLACE_PICKER_REQUEST);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
String badLocation = "That location is not valid for this app, please select a valid location";
if (requestCode == PLACE_PICKER_REQUEST) {
if (resultCode == Activity.RESULT_OK) {
place = PlacePicker.getPlace(data, getActivity().getApplicationContext());
if (place.getPlaceTypes().contains(34)) {
if (place.getPlaceTypes().contains(9) || place.getPlaceTypes().contains(15) ||
place.getPlaceTypes().contains(38) ||
place.getPlaceTypes().contains(67) ||
place.getPlaceTypes().contains(79)) {
where.setText(place.getName());
loc = true;
} else {
Toast.makeText(getActivity().getApplicationContext(),
badLocation, Toast.LENGTH_LONG).show();
try {
launchPlace();
} catch (GooglePlayServicesNotAvailableException | GooglePlayServicesRepairableException e) {
e.printStackTrace();
}
}
}
}
}
}
Ce code fonctionnait auparavant (il y a 3 heures) et ne fonctionne plus maintenant. Voici ce que dit Logcat: (Android Studio)
04-21 15:48:02.320 5045-5045/com.siliconmindtech.trofi D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
04-21 15:48:02.680 5045-5124/com.siliconmindtech.trofi D/OpenGLRenderer﹕ endAllStagingAnimators on 0xa1a55600 (InsetDrawable) with handle 0xa185dff0
04-21 15:48:05.000 5045-5121/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
04-21 15:48:05.060 5045-5045/com.siliconmindtech.trofi I/Timeline﹕ Timeline: Activity_idle id: Android.os.BinderProxy@215c768a time:9757022
Si quelqu'un connaît un moyen d'aider avec cela, ce serait formidable, je sais que Google PlacePicker est une nouveauté, mais je suis un développeur novice pour Android et j'ai l'impression que quelqu'un a une meilleure compréhension que moi. Toute aide serait la bienvenue. Si plus d'informations sont nécessaires s'il vous plaît faites le moi savoir. Nous utilisons GitHub, donc je suis revenu à la situation précédente, mais rien n’a changé, il reste fermé (le sélecteur, pas l’application). J'ai activé l'API Google Adresses et l'API Google Adresses pour Android dans la console du développeur, aucune aide non plus. Il se rend à l'écran "Mise à jour de votre position" puis s'arrête.
EDIT: Il s’agit de l’ensemble du LogCat, du lancement (sur un Samsung Galaxy S5) au PlacePicker (1 navigation avant cette action) puis fermeture et retour à l’application. Est-ce que c'est ce que vous vouliez dire?
04-21 16:56:26.740 27318-27318/com.siliconmindtech.trofi D/ResourcesManager﹕ creating new AssetManager and set to /data/app/com.siliconmindtech.trofi-1/base.apk
04-21 16:56:26.910 27318-27318/com.siliconmindtech.trofi D/AbsListView﹕ Get MotionRecognitionManager
04-21 16:56:26.910 27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
04-21 16:56:26.910 27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isShipBuild true
04-21 16:56:26.910 27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Thread-13137-1066627414: SmartBonding Enabling is false, SHIP_BUILD is true, log to file is false, DBG is false
04-21 16:56:26.910 27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
04-21 16:56:26.910 27318-27318/com.siliconmindtech.trofi D/AbsListView﹕ Get MotionRecognitionManager
04-21 16:56:26.940 27318-27318/com.siliconmindtech.trofi D/Activity﹕ performCreate Call secproduct feature valuefalse
04-21 16:56:26.940 27318-27318/com.siliconmindtech.trofi D/Activity﹕ performCreate Call debug elastic valuetrue
04-21 16:56:26.950 27318-27318/com.siliconmindtech.trofi D/AbsListView﹕ Get MotionRecognitionManager
04-21 16:56:26.970 27318-27350/com.siliconmindtech.trofi D/OpenGLRenderer﹕ Render dirty regions requested: true
04-21 16:56:27.030 27318-27350/com.siliconmindtech.trofi I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build: ()
OpenGL ES Shader Compiler Version: E031.25.01.03
Build Date: 10/28/14 Tue
Local Branch: LA.BF.1.1_RB1_20141028_021_patches2
Remote Branch:
Local Patches:
Reconstruct Branch:
04-21 16:56:27.030 27318-27350/com.siliconmindtech.trofi I/OpenGLRenderer﹕ Initialized EGL, version 1.4
04-21 16:56:27.050 27318-27350/com.siliconmindtech.trofi I/OpenGLRenderer﹕ HWUI protection enabled for context , &this =0xa23090d8 ,&mEglDisplay = 1 , &mEglConfig = 8
04-21 16:56:27.050 27318-27350/com.siliconmindtech.trofi D/OpenGLRenderer﹕ Enabling debug mode 0
04-21 16:56:27.050 27318-27340/com.siliconmindtech.trofi I/System.out﹕ KnoxVpnUidStorageknoxVpnSupported API value returned is false
04-21 16:56:27.240 27318-27350/com.siliconmindtech.trofi V/RenderScript﹕ Application requested CPU execution
04-21 16:56:27.260 27318-27350/com.siliconmindtech.trofi V/RenderScript﹕ 0xa2377a00 Launching thread(s), CPUs 4
04-21 16:56:27.310 27318-27318/com.siliconmindtech.trofi I/Timeline﹕ Timeline: Activity_idle id: Android.os.BinderProxy@344b9848 time:13859270
04-21 16:56:29.700 27318-27318/com.siliconmindtech.trofi D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
04-21 16:56:31.850 27318-27318/com.siliconmindtech.trofi D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
04-21 16:56:31.970 27318-27318/com.siliconmindtech.trofi I/Places﹕ Got here!
04-21 16:56:32.300 27318-27350/com.siliconmindtech.trofi D/OpenGLRenderer﹕ endAllStagingAnimators on 0xa196d600 (InsetDrawable) with handle 0xaf7fc350
04-21 16:56:32.740 27318-27318/com.siliconmindtech.trofi I/Timeline﹕ Timeline: Activity_idle id: Android.os.BinderProxy@344b9848 time:13864703
Le LogCat ci-dessus est verbeux.
Solution: Ne soyez pas un débutant comme moi, j'avais oublié d'ajouter ma clé API Google à mon Android_manifest.xml ... Je m'excuse.
Il suffit d’activer API Google Places pour Android dans votre console de développeur Google.
N'oubliez pas de spécifier votre clé API à AndroidManifest
:
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="ADD_YOUR_API_KEY_HERE" />
Je crois que lorsque Google a modifié leurs API le 20/04/2015, ils ont modifié l'API d'espaces utilisée de manière inhérente par PlacePicker. La solution qui a fonctionné pour moi est la suivante:
<application ...
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="@string/google_api_key" />
... </application>
<string name="google_api_key">yourkeyhere</string>
J'ai le même problème. J'ajoute la clé Google Map
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="@string/google_maps_key"/>` in manifest file.
Le sélecteur de lieu se ferme immédiatement. Ensuite, j'ajoute aussi
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="@string/google_api_key" />
Le sélecteur de lieu s'affiche, mais lorsque j'ouvre la carte, mon application est fermée de force et se connecte comme ci-dessous.
RuntimeException: The API key can only be specified once. It is recommended that you use the meta-data tag with the name: com.google.Android.maps.v2.API_KEY in the <application> element of AndroidManifest.xml
at com.google.maps.api.Android.lib6.d.fb.a(Unknown Source)
at com.google.maps.api.Android.lib6.a.g.a(Unknown Source)
at com.google.Android.gms.maps.internal.CreatorImpl.b(Unknown Source)
at com.google.Android.gms.maps.internal.CreatorImpl.b(Unknown Source)
at com.google.Android.gms.maps.internal.i.onTransact(SourceFile:62)
at Android.os.Binder.transact(Binder.Java:364)
at com.google.Android.gms.maps.internal.zzc$zza$zza.zzj(Unknown Source)
at com.google.Android.gms.maps.SupportMapFragment$zzb.zzqs(Unknown Source)
at com.google.Android.gms.maps.SupportMapFragment$zzb.zza(Unknown Source)
at com.google.Android.gms.dynamic.zza.zza(Unknown Source)
at com.google.Android.gms.dynamic.zza.onCreate(Unknown Source)
at com.google.Android.gms.maps.SupportMapFragment.onCreate(Unknown Source)
at Android.support.v4.app.Fragment.performCreate(Fragment.Java:1763)
at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:915)
at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:1136)
at Android.support.v4.app.BackStackRecord.run(BackStackRecord.Java:739)
at Android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.Java:1499)
at Android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.Java:456)
at Android.os.Handler.handleCallback(Handler.Java:733)
at Android.os.Handler.dispatchMessage(Handler.Java:95)
at Android.os.Looper.loop(Looper.Java:136)
at Android.app.ActivityThread.main(ActivityThread.Java:5103)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:515)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:790)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:606)
at dalvik.system.NativeStart.main(Native Method)
J'essaie d'enlever
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="@string/google_maps_key"/>` but keep `<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="@string/google_api_key" />
Et ça marche bien, maintenant, et je ne sais pas pourquoi.
remplacez votre balise meta data dans le mainfeast .. ça marche pour moi ..
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="YOUR Android KEY" />
avec
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="YOUR Android KEY" />
bonne chance
J'ai eu les mêmes problèmes en utilisant l'API Places. À la fin, j'ai découvert qu'il existe différentes API Google Adresses, en particulier pour Android. Par conséquent, la clé API que j'utilisais était simplement destinée à la version non Android.
Générez votre clé en utilisant le lien suivant: https://developers.google.com/places/Android-api/signup
dans mon cas, accédez à Google Console, puis à l'API activée pour Android, puis accédez à Manifest.xml et mettez ce code sous
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="@string/google_maps_key" />
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
et n'oubliez pas de mettre la clé Google API