web-dev-qa-db-fra.com

Google PlacePicker se ferme immédiatement après son lancement

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.

30
Cole Laidlaw

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" />
47
fraggjkee

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:

  1. Accédez à votre console de développeur Google ( https://console.developers.google.com/project ).
  2. Accédez à votre projet si vous en avez créé un. Sinon, allez ici: https://developers.google.com/console/help/
  3. Accédez à "API et authentification", puis à "Informations d'identification" sur le côté gauche de la console. Je n'ai pas assez de rep pour poster une photo à titre indicatif ...
  4. Créez une nouvelle clé. Celle-ci apparaît sous Accès à l'API publique dans votre fenêtre Informations d'identification. Vous aurez besoin de votre empreinte digitale SHA1 pour recevoir la clé. Les instructions que j’ai utilisées sont les suivantes: Comment obtenir le certificat d’empreinte digitale SHA-1 sous Android Studio en mode débogage?
  5. L'emplacement dans lequel vous avez saisi votre empreinte digitale SHA1 doit être au format suivant: (Votre clé, 20 valeurs hexadécimales séparées par ":");
  6. Copiez votre clé API générée. Vous devrez ajouter les empreintes digitales de chaque développeur dans le même format que ci-dessus pour que cela fonctionne pour d'autres développeurs.
  7. Ajoutez votre clé à votre AndroidManifest.xml

<application ...

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

... </application>
Où "@ string/google_api_key" /> est la clé que vous venez de générer. Placez-le dans votre fichier strings.xml en tant que tel:

<string name="google_api_key">yourkeyhere</string>
  1. Nettoyez et reconstruisez votre projet. Devrait travailler maintenant. Je ne pense pas avoir laissé d'étapes ... S'il vous plaît commenter si j'ai.
6
Cole Laidlaw

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.

5
thethanh

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

4
ahmed ewess

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

1
bsautermeister

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

0
Yudi karma