places placeautocompletefragment google example custom address android android-fragments google-places

android - google - placeautocompletefragment in fragment



Google PlacePicker se cierra inmediatamente después del lanzamiento (6)

Estoy desarrollando una aplicación de Android y estaba buscando en Google Places alguna funcionalidad dentro de la aplicación. Google lanzó recientemente la función PlacePicker, que es lo que estoy usando. He seguido las pautas de Google y las guías de inicio rápido para la "T". La funcionalidad funcionaba increíble desde hace tres horas y ahora, cuando la pruebo, se inicia y luego se cierra inmediatamente sin errores en el seguimiento de la pila. Así es como estoy usando el código:

Esto está dentro de un fragmento.

// 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(); } } });

Esto está dentro de los fragmentos enCreateView.

El método launchPlace () se define de la siguiente manera.

// 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(); } } } } } }

Este código funcionó previamente (hace 3 horas) y ahora no. Esto es lo que dice 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 alguien sabe de una forma de ayudar con esto que sería increíble, sé que Google PlacePicker es bastante nuevo, pero soy un desarrollador de Android novato y siento que alguien tiene una mejor comprensión que yo. Cualquier y toda ayuda sería apreciada. Si se requiere más información, por favor hágamelo saber. Usamos GitHub, así que volví todo el camino de regreso a cuando alguna vez funcionó, sin embargo, nada cambió, todavía se cierra (el selector, no la aplicación). He habilitado la API de Google Places y la API de Google Places para Android en la consola de desarrollador, tampoco hay ayuda allí. Llega a la pantalla "Actualizando su ubicación" y luego se detiene.

EDITAR: Este es todo el LogCat, desde el lanzamiento (en un Samsung Galaxy S5) hasta el inicio de PlacePicker (una navegación previa a esa acción) luego el cierre y el regreso a la aplicación. ¿Es esto lo que querías decir?

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

El LogCat anterior es detallado.

Solución: No seas un novato como yo, olvidé agregar mi Google API Key a mi android_manifest.xml ... Me disculpo.


Cómo solucioné este error al obtener una clave de API (En la página de Google Developers), la ubicación donde ingresas el nombre de tu paquete ingresa el nombre completo de tu paquete. ¡Esto está disponible en tu manifiesto de Android!


Creo que cuando Google realizó cambios en sus API el 20/04/2015, modificó la API de lugares que utiliza PlacePicker inherentemente. La solución que funcionó para mí es la siguiente:

  1. Vaya a la Consola para programadores de Google ( https://console.developers.google.com/project )
  2. Navegue a su proyecto si ha creado uno. Si no, vaya aquí: https://developers.google.com/console/help/
  3. Ve a "APIs & auth" y luego a "Credentials" en el lado izquierdo de la consola. No tengo suficientes representantes para publicar una imagen como guía ...
  4. Cree una nueva clave, esto aparece bajo el acceso público de API en su ventana de credenciales. Necesitarás tu huella digital SHA1 para recibir la llave. Las instrucciones que utilicé están aquí: ¿Cómo obtener el certificado de huella digital SHA-1 en Android Studio para el modo de depuración?
  5. La ubicación en la que ingrese su huella digital SHA1 debe tener este formato: (Su clave, 20 valores hexadecimales separados por ":"); com.yourpackage.yourapp
  6. Copie su clave API que se genera. Tendrá que agregar la huella digital de cada desarrollador en el mismo formato anterior para que funcione para otros desarrolladores.
  7. Agregue su clave a su AndroidManifest.xml

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

Donde "@ string / google_api_key" /> es la clave que acaba de generar. Colóquelo en su archivo strings.xml como tal:

<string name="google_api_key">yourkeyhere</string>

  1. Limpia y reconstruye tu proyecto. Debería estar trabajando ahora. No creo que haya dejado ningún paso ... Por favor coméntalo si lo hago.

Simplemente habilite la API de Google Places para Android en su Google Developer Console.

No olvides especificar tu clave API en AndroidManifest :

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


Tengo el mismo problema. Agregué la clave del mapa de Google

<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="@string/google_maps_key"/>` in manifest file.

El selector de lugar se cierra de inmediato. Luego, también agrego

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

Se muestra el Selector de lugar, pero cuando abro el mapa, mi aplicación se cerró, y se registra como a continuación.

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)

Intento eliminar

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

Y está funcionando bien, ahora, y no sé por qué.


Tuve los mismos problemas al usar la API de Places. Al final, descubrí que hay diferentes API de Google Places especialmente para Android. En consecuencia, la API-Key que estaba usando era simplemente para la versión que no es de Android.

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


reemplace su etiqueta de metadatos en el plato principal ... funciona para mí ...

<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="YOUR ANDROID KEY" />

con

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

buena suerte