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
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.
Avez-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!
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.
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.
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.
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.
Ajouter la compilation 'com.google.android.gms:play-services-location:8.1.0'
dans gradle
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:
Utilisez une seule clé API qui est dans google-service.fichier json
-
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)
- Mettez la Restriction D'Application SHA1 pour l'application android (recommandée)
-
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" />
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
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.