Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Uso de GoogleApiClient + LocationServices sin actualizar

Esta es mi primera pregunta, así que espero que vaya bien.

Sólo estoy tratando de hacer una sencilla aplicación "tutorial" para obtener la ubicación de mi teléfono (para aprender a usarlo más tarde en alguna otra aplicación), pero no estoy llegando a ninguna parte.

  • Android No se pueden retener fragmentos que están anidados en otros fragmentos
  • ¿Soporta Android el escalado de vídeo?
  • Lanzar la compilación Android de Gradle personalizada en Android Studio
  • Encadenar dos observables de adaptación con RxJava
  • Grabación de marcos generados por Open GL ES en android
  • ¿Cómo eliminar el retraso al abrir una actividad con un DrawerLayout?
  • Qué he hecho

    1. Tutorial del desarrollador de Android: Primero, seguí el tutorial en el sitio de desarrolladores de Android (developer.android.com/training/location/receive-location-updates.html).

      Justo como se indica en allí, he utilizado un Location, LocationClient y LocationRequest, inicializarlos (y configurarlos) en onCreate. LocationClient está conectado y desconectado en onStart y onStop.

      Estoy solicitando actualización de ubicación después de estar conectado (en onConnected). Compruebo que GooglePlayServices está disponible antes de hacer esta llamada y todavía no obtengo ninguna actualización en "onLocationChanged".

    2. GoogleApiClient: He notado que LocationClient está obsoleto y que LocationServices es el preferido (developer.android.com/reference/com/google/android/gms/location/LocationClient.html).

      Como se indica aquí: https://developer.android.com/reference/com/google/android/gms/location/FusedLocationProviderApi.html , uso un GoogleApiClient y lo configuro en LocationServices (también https://stackoverflow.com/a / 25013850/3802589 ). Así que lo configuré todo para usar esto, pero todavía no estoy recibiendo ninguna actualización en la ubicación.

    OnLocationChanged se debe imprimir si hay una respuesta. También puse un botón que imprime la localización o "nada".

    Observaciones

    He comprobado usando Google Maps para ver si tal vez tenía algo fuera, pero está funcionando muy bien.

    Proyecto

    Construir un gradiente

    dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.google.android.gms:play-services:5.0.77' compile "com.android.support:support-v4:20.0.+" } 

    Manifiesto

     ... <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> ... <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> ... 

    Código

     public class MyActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener{ private GoogleApiClient mLocationClient; private Location mCurrentLocation; LocationRequest mLocationRequest; ... /* Constant fields - request interval */ ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); mLocationClient = new GoogleApiClient.Builder(getApplicationContext()) .addApi(LocationServices.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); mLocationRequest = new LocationRequest(); mLocationRequest.setInterval(UPDATE_INTERVAL); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mLocationRequest.setFastestInterval(FASTEST_INTERVAL); } @Override protected void onStart() { super.onStart(); mLocationClient.connect(); } @Override protected void onStop() { super.onStop(); LocationServices.FusedLocationApi.removeLocationUpdates(mLocationClient, this); mLocationClient.disconnect(); } public void onClick(View view) { if (mCurrentLocation != null) { Log.i("Location", mCurrentLocation.toString()); }else{ Log.i("Location", "nothing"); } } @Override public void onLocationChanged(Location location) { Log.d("Location Update", "CHANGED"); mCurrentLocation = location; } @Override public void onConnected(Bundle bundle) { // Display the connection status Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show(); if(servicesConnected()) { LocationServices.FusedLocationApi.requestLocationUpdates(mLocationClient, mLocationRequest, this); } } @Override public void onConnectionSuspended(int i) { Toast.makeText(this, "Disconnected. Please re-connect.", Toast.LENGTH_SHORT).show(); } 

    Logcat

     8948-8948/example.android.com.test D/Location Updates﹕ Google Play services is available. 8948-8948/example.android.com.test I/Location﹕ nothing 

    Siento que podría estar olvidando algo realmente simple … pero no puedo verlo y he pasado demasiado tiempo tratando de conseguir una ubicación sencilla …

    Podría tal vez sólo usar la API de android.location pero … Me molesta que esto es tan difícil (supuestamente es más fácil).

  • Custom android.app.Application no disparar evento onCreate
  • Cargar una imagen de la carpeta de activos
  • El proyecto no fue construido ya que su camino de construcción es incompleto
  • Cómo obtener el número smsc de un teléfono en android?
  • Problemas al importar un proyecto de Android en Eclipse
  • Búsqueda en una base de datos SQLite que contenga datos cítricos
  • 2 Solutions collect form web for “Uso de GoogleApiClient + LocationServices sin actualizar”

    El error fue sólo que wifi no estaba en … Y no me di cuenta.

    En cuanto a lo que GregM dijo, si estoy correcto que es la API de edad (la mayoría de ellos desaprobados ahora) y como se indica en el sitio del desarrollador ( https://developer.android.com/google/auth/api-client.html ) Tienes que usar un GoogleApiClient como se muestra en mi pregunta original (y lo mismo para los callbacks).

    Las tres devoluciones:

     public void onConnectionFailed(ConnectionResult arg0){} public void onConnected(Bundle bundle){} public void onConnectionSuspended(int arg0){} 

    Debe ser implementado. Sin embargo, no veo que onConnectionFailed sea ​​sobreescrito. El compilador debería haber dado un error en este caso. Existen dos implementaciones de LocationListener , una para LocationListener y otra para gms.location.LocationListener . Es posible que desee comprobar si está utilizando la versión gms.

    Espero que Google actualice su código de la muestra del entrenamiento al nuevo modelo del cliente y elimine la confusión adicional.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.