Android place Picker se ferme immédiatement après le lancement

Je développe une application android dans le cadre d'un projet, et j'utilise L'API Google places pour afficher les lieux d'intérêt en fonction de l'emplacement. J'utilise le PlacePicker Inentbuilder pour accomplir cela.

Cependant, lorsque l'application est exécutée, le sélecteur de place se lance puis se ferme immédiatement (environ 1-2 secondes).

J'ai déjà implémenté les suggestions ci-dessous (que j'ai obtenues d'autres réponses):

J'ai généré la clé API publique pour les applications android, et Je l'inclus dans la balise méta-données dans le manifeste de l'application.

J'ai activé L'API" Google Places API for android " sur la console des développeurs.

J'ai inclus la dernière version de play services dans les dépendances dans la construction.gradle.

J'ai inclus mon code et le logcat ci-dessous. Faites-moi savoir si je dois inclure autre chose.

Manifeste.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sampath.project.project_v2" >

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


<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".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.gms.version"
        android:value="@integer/google_play_services_version" />

    <meta-data
        android:name="com.google.android.geo.api_key"
        android:value="@string/google_api_key" />
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_api_key" />"

    <activity
        android:name=".LoginActivity"
        android:label="@string/title_activity_login" >
    </activity>
    <activity
        android:name=".PlacesSample"
        android:label="@string/title_activity_places_sample" >
        <meta-data
            android:name="com.google.android.geo.api_key"
            android:value="@string/google_api_key" />
    </activity>
</application>

</manifest>

Construire.gradle (app module - C'est le seul module)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.sampath.project.project_v2"
        minSdkVersion 16
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    //compile fileTree(include: ['*.jar'], dir: 'libs')
    //compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'com.android.support:cardview-v7:22.1.1'
    compile 'com.android.support:recyclerview-v7:22.1.1'
    compile 'com.google.android.gms:play-services:7.3.0'
}

PlacesSample-activité qui utilise L'API Google places:

package com.sampath.project.project_v2;


import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.common.GooglePlayServicesRepairableException;
import com.google.android.gms.location.places.Place;
import com.google.android.gms.location.places.ui.PlacePicker;


public class PlacesSample extends AppCompatActivity {
    TextView getLocation;
    int PLACE_PICKER_REQUEST = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_places_sample);
        getLocation = (TextView)findViewById(R.id.getLocTV);
        getLocation.setClickable(true);
        getLocation.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
                Intent intent;
                try {
                    intent = builder.build(getApplicationContext());
                    startActivityForResult(intent, PLACE_PICKER_REQUEST);
                    System.out.println("start activity for result");
                } catch (GooglePlayServicesRepairableException e) {
                    e.printStackTrace();
                } catch (GooglePlayServicesNotAvailableException e) {
                    e.printStackTrace();
                }

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_places_sample, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        System.out.println("onActivityResult");
        if (requestCode == PLACE_PICKER_REQUEST) {
            if (resultCode == RESULT_OK) {
                Place place = PlacePicker.getPlace(data, this);
                String toastMsg = String.format("Place: %s", place.getName());
                Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();
            }
        }
    }
}

Logcat:

05-05 23:38:30.593  21408-21408/com.sampath.project.project_v2 I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@17e945c6 time:628772943
05-05 23:38:30.598  21408-21408/com.sampath.project.project_v2 I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@17e945c6 time:628772948
05-05 23:38:31.517  21408-21408/com.sampath.project.project_v2 I/Timeline﹕ Timeline: Activity_launch_request id:com.sampath.project.project_v2 time:628773867
05-05 23:38:31.527  21408-21408/com.sampath.project.project_v2 W/ResourceType﹕ For resource 0x01030224, entry index(548) is beyond type entryCount(9)
05-05 23:38:31.527  21408-21408/com.sampath.project.project_v2 W/ResourceType﹕ For resource 0x01030224, entry index(548) is beyond type entryCount(9)
05-05 23:38:31.636  21408-21408/com.sampath.project.project_v2 I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@2daadb0a time:628773986
05-05 23:38:33.869  21408-21408/com.sampath.project.project_v2 I/System.out﹕ start activity for result
05-05 23:38:34.227  21408-21408/com.sampath.project.project_v2 I/System.out﹕ onActivityResult
05-05 23:38:34.235  21408-21408/com.sampath.project.project_v2 I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@2daadb0a time:628776586
43
demandé sur naXa 2015-05-06 06:54:59

10 réponses

Les solutions de François Wouts ont aidé à y répondre. Merci Francois...

J'ai cherché dans les journaux avec le mot-clé 'Places' et j'ai trouvé que L'API Places lançait en effet une exception. Il attendait le com.google.android.geo.API_KEY dans les balises <application> dans le Manifeste.XML.

J'avais changé en com.google.android.geo.API_KEY dans la balise <activity> et non celle de la balise <application>.

Maintenant changé en com.google.android.geo.API_KEY et supprimé les mêmes lignes de la balise <activity>, et l'a fait fonctionner. Se sentir comme un idiot pour ne pas travailler en m'..

La balise meta-data doit se lire android:name="com.google.android.geo.API_KEY"
Il devrait être dans la balise <application> dans le Manifeste.

53
répondu Sampath Janardhan 2016-11-23 05:26:53

entrez la description de l'image iciAvez-vous vérifié que votre clé API est associée à votre application (Nom du package et empreinte SHA-1 du certificat de votre application) dans Developer Console ?

Vous pouvez trouver des instructions sur Signup et API Keys . Assurez-vous de le configurer pour votre Débogage et vos certificats de version.

J'espère que cela aide!

23
répondu Francois Wouts 2017-12-06 10:51:33

J'avais le même problème. Assurez-vous d'activer Google Places API pour Android et pas seulement Places API dans la console de développement . "Places API pour Android "n'apparaîtra pas sous APIs & Auth / APIs car ce N'est pas encore une API populaire. Vous devrez le rechercher en utilisant la boîte de recherche API.

16
répondu Anirban 2018-03-17 01:29:22

Dans le fichier manifeste com.Google.Android.geo.api_key et com.Google.Android.cartographie.v2.API_KEY ne devrait pas être identique.

Aller https://console.developers.google.com/project

Connectez-vous et suivez ces étapes pour obtenir la clé des lieux placepicker.

Créer ou choisir existant > utiliser les API google >API Google Places pour Android > Activer > informations d'identification dans le menu de gauche > ajouter des informations d'identification > clé api > clé android > Créer > clé de copie.

Collez votre clé au manifeste "com.Google.Android.geo.api_key "

Remarque : il y a une limite de 1000 requêtes par jour pour l'api google places. après vous avoir à payer de l'argent. Mieux vaut éviter PlacePicker.

5
répondu Hari krishna Andhra Pradesh 2015-12-09 09:56:45

Je remplis l'écran de consentement dans les API et L'authentification de la console et son fonctionnement correct. De vérifier la capture d'écran. entrez la description de l'image ici

1
répondu varotariya vajsi 2018-05-18 06:51:58

Il était étrange que ce soit un problème d'identification pour moi. Cela fonctionne même sans avertissement en mode débogage, mais quand j'utilise la version publiée de mon application, cela ne fonctionne pas (j'ai enregistré mes clés release et debug sha1) donc j'ai supprimé toutes les restrictions et maintenant ça marche.

1
répondu Yusuf Çağlar 2018-06-05 15:35:58

Ajouter la compilation 'com.google.android.gms:play-services-location:8.1.0' dans gradle

1
répondu Mahendra Tejaswi 2018-07-05 07:52:48

Dans mon cas, il y avait un conflit D'API. J'ai ajouté google-service.fichier json qui avait également une clé API et j'ai généré une nouvelle clé pour les cartes. Placez le sélecteur de fermeture immédiatement. Solution:

  1. Utilisez une seule clé API qui est dans google-service.fichier json

  2. Activez la fonctionnalité" Places SDK pour Android " pour votre projet Google Cloud Platform (avec le même nom que dans le projet Firebase, n'utilisez pas de projet différent. Vous trouverez le même projet de nom que vous utilisez dans Firebase)

  3. Mettez la Restriction D'Application SHA1 pour l'application android (recommandée)
  4. Vérifiez si vous avez placé le code suivant dans la balise D'Application uniquement

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="API_KEY" />
    
1
répondu snj 2018-08-06 18:43:14

Ce problème m'a rendu fou aussi, il y a tellement de problèmes concernant exactement ce problème, mais personne n'a été utile pour moi. À la fin, j'ai compris qu'il existe différentes API Google Places en particulier pour Android. Par conséquent, la clé API que j'utilisais était simplement pour la version non-Android.

Générez votre clé en utilisant ce lien https://developers.google.com/places/android-api/signup

0
répondu bsautermeister 2017-10-08 18:45:02

Peut-être que vous avez oublié d'ajouter votre clé SHA de la machine à la Console Google Maps. Face au même problème, a ajouté ma clé SHA à la console, il a commencé à fonctionner correctement.

0
répondu Satya Attili 2018-04-27 04:29:43