studio places para how google gms clave address android google-places-api

para - google places autocomplete android



Android Place Picker se cierra inmediatamente después del lanzamiento (12)

Agregue la compilación ''com.google.android.gms:play-services-location:8.1.0'' en gradle

Estoy desarrollando una aplicación de Android como parte de un proyecto y estoy usando la API de Google Places para mostrar lugares de interés según la ubicación. Estoy usando PlacePicker Inentbuilder para lograr esto.

Sin embargo, cuando se ejecuta la aplicación, se inicia el selector de lugares y luego se cierra inmediatamente (aproximadamente 1-2 segundos).

Ya he implementado las siguientes sugerencias (que obtuve de otras respuestas):

He generado la clave API pública para aplicaciones de Android, y estoy incluyendo esto en la etiqueta de metadatos en el manifiesto de la aplicación.

He habilitado la API "Google Places API para Android" en la consola de desarrolladores.

He incluido la última versión de servicios de reproducción en dependencias en build.gradle.

He incluido mi código y el logcat a continuación. Avíseme si necesito incluir algo más.

Manifest.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>

Build.gradle (módulo de aplicación: este es el único módulo)

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: actividad que utiliza la API de 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


Completo la pantalla de Consentimiento en APIs y autenticación de la consola y está funcionando bien. Verifique la captura de pantalla.


Dejaré esto aquí, tal vez ayude a alguien en el futuro.

Para mí, usar la clave Api incorrecta causó el bloqueo, a pesar de que funcionó bien en el pasado.

Tuve que usar la segunda clave (la que los servicios de Google crean automáticamente para Android) en lugar de la primera que creé.


En el archivo de manifiesto, com.google.android.geo.api_key y com.google.android.maps.v2.API_KEY no deberían ser iguales.

vaya a https://console.developers.google.com/project

inicie sesión y siga estos pasos para obtener la clave para los lugares de placepicker.

crear o elegir existente> usar apis de google> API de Google Places para Android > habilitar> credenciales en el menú de la izquierda> agregar credenciales> clave api> clave android> crear> clave de copia.

pegue su clave en el manifiesto " com.google.android.geo.api_key "

Nota : hay un límite de 1000 solicitudes por día para la API de Google Places. después de que tienes que pagar dinero. Es mejor evitar PlacePicker.


En mi caso hubo conflicto de API. Agregué el archivo google-service.json que también tenía una clave API y generé una nueva clave para Maps. Así que el selector de lugar se estaba cerrando de inmediato. Solución:

  1. Utilice una clave API única que esté en el archivo google-service.json

  2. Habilite la función "Lugares SDK para Android" para su proyecto de Google Cloud Platform (con el mismo nombre que en el proyecto Firebase, no use un proyecto diferente. Encontrará el mismo nombre que está usando en Firebase)

  3. Poner restricción de aplicación SHA1 para la aplicación de Android (recomendado)
  4. Compruebe si ha colocado el siguiente código en la etiqueta de la aplicación únicamente

    <meta-data android:name="com.google.android.geo.API_KEY" android:value="API_KEY" />


En mi caso, cuando cambié la clave API actual con la que está en google-service.json , resolvió el problema.

En google-services.json:

"api_key": [ { "current_key": "PASTE THIS API KEY TO THE MANIFEST" } ]


Era extraño que fuera un problema de credenciales para mí. Funciona incluso sin una advertencia en el modo de depuración, pero cuando uso la versión lanzada de mi aplicación simplemente no funciona (he registrado mis teclas sha1 de liberación y depuración). Así que eliminé todas las restricciones y ahora funciona.


Es posible que haya olvidado agregar la clave SHA de su máquina a la Consola de Google Maps. Frente al mismo problema, agregué mi clave SHA a la consola, comenzó a funcionar bien.


Este problema también me volvió loco, hay tantos problemas con respecto exactamente a este problema, pero nadie fue útil para mí. Al final, descubrí que hay diferentes API de Google Places, especialmente para Android. En consecuencia, la clave API que estaba usando era simplemente para la versión no Android.

Genere su clave usando este enlace https://developers.google.com/places/android-api/signup


Las soluciones de Francois Wouts ayudaron a responder esto. Gracias Francois ...

Busqué en los registros con la palabra clave ''Lugares'' y descubrí que la API de Lugares estaba arrojando una excepción. Esperaba el com.google.android.geo.API_KEY dentro de las etiquetas <application> en el Manifest.xml.

Había cambiado a com.google.android.geo.API_KEY en la etiqueta <activity> y no en la etiqueta <application> .

Ahora cambió a com.google.android.geo.API_KEY y eliminó las mismas líneas de la etiqueta <activity> , y lo hizo funcionar. Siéntete como un idiota por no resolver esto solo ...

La etiqueta de metadatos debería leer android:name="com.google.android.geo.API_KEY"
Debe estar dentro de la etiqueta <application> en el Manifiesto.


Yo estaba teniendo el mismo problema. Asegúrese de habilitar la API de Google Places para Android y no solo la API de Lugares en la Consola del desarrollador . "Places API for Android" no aparecerá en las API y Auth / API porque todavía no es una API popular. Tendrá que buscarlo utilizando el cuadro de búsqueda API.


¿Ha verificado que su clave API esté asociada con su aplicación (nombre del paquete y huella digital SHA-1 del certificado de su aplicación) en la Consola del desarrollador ?

Puede encontrar instrucciones en Signup y API Keys . Asegúrese de configurarlo tanto para su depuración como para sus certificados de lanzamiento.

¡Espero que eso ayude!