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


La devolución de llamada de google api client nunca se llama

Estoy tratando de obtener la última ubicación conocida utilizando la API de servicios de google, pero después de crear GoogleApiClient, ningún método de devolución de llamada se activa nunca.

Mi actividad se ve así:

public class MainActivity extends Activity implements FragmentObserver, SessionSpotListObserver, ConnectionCallbacks, OnConnectionFailedListener{ //Objects used for the location API private Location mLastLocation; private GoogleApiClient mGoogleApiClient; // Request code to use when launching the resolution activity private static final int REQUEST_RESOLVE_ERROR = 1001; // Unique tag for the error dialog fragment private static final String DIALOG_ERROR = "dialog_error"; // Bool to track whether the app is already resolving an error private boolean mResolvingError = false; public static final String STATE_RESOLVING_ERROR = "resolving_state"; //Request code to use when launching the activity to fix the connection to google API private static final int REQUEST_SOLVE_CONNEXION = 999; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //We make sure that google play service is available on the device if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(this) == ConnectionResult.SUCCESS){ //We get a connection to the Google Play Service API to get the location of the user buildGoogleApiClient(); } else { GooglePlayServicesUtil.getErrorDialog(GooglePlayServicesUtil.isGooglePlayServicesAvailable(this), this, REQUEST_SOLVE_CONNEXION); } } @Override public void onConnectionFailed(ConnectionResult result) { if (mResolvingError) { // Already attempting to resolve an error. return; } else if (result.hasResolution()) { try { mResolvingError = true; result.startResolutionForResult(this, REQUEST_RESOLVE_ERROR); } catch (SendIntentException e) { // There was an error with the resolution intent. Try again. mGoogleApiClient.connect(); } } else { // Show dialog using GooglePlayServicesUtil.getErrorDialog() showErrorDialog(result.getErrorCode()); mResolvingError = true; } } // The rest of this code is all about building the error dialog /* Creates a dialog for an error message */ private void showErrorDialog(int errorCode) { // Create a fragment for the error dialog ErrorDialogFragment dialogFragment = new ErrorDialogFragment(); // Pass the error that should be displayed Bundle args = new Bundle(); args.putInt(DIALOG_ERROR, errorCode); dialogFragment.setArguments(args); dialogFragment.show(getFragmentManager(), "errordialog"); } /* Called from ErrorDialogFragment when the dialog is dismissed. */ public void onDialogDismissed() { mResolvingError = false; } /* A fragment to display an error dialog */ public static class ErrorDialogFragment extends DialogFragment { public ErrorDialogFragment() { } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Get the error code and retrieve the appropriate dialog int errorCode = this.getArguments().getInt(DIALOG_ERROR); return GooglePlayServicesUtil.getErrorDialog(errorCode, this.getActivity(), REQUEST_RESOLVE_ERROR); } @Override public void onDismiss(DialogInterface dialog) { ((MainActivity)getActivity()).onDialogDismissed(); } } @Override public void onConnected(Bundle arg0) { mLastLocation = LocationServices.FusedLocationApi.getLastLocation( mGoogleApiClient); Log.d("API Connection", "The API has connected and the last location is :" + mLastLocation); if (mLastLocation != null) { } } @Override public void onConnectionSuspended(int arg0) { // TODO Auto-generated method stub } /** * Creates the connexion to the Google API. Once the API is connected, the * onConnected method is called. */ protected synchronized void buildGoogleApiClient() { mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(LocationServices.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); } 

Coloque puntos de interrupción en todos los métodos de devolución de llamada, que es cómo sé que ninguno se llama.

Debido a que en este momento no uso Google Map Api, no registré mi aplicación para obtener una clave. ¿Necesito hacer eso incluso si recibo la localización?

No dude en decirme si necesita más información.

Gracias a todos.

  • Detectar o impedir si el usuario utiliza una ubicación falsa
  • GoogleApiClient está lanzando "GoogleApiClient no está conectado todavía" DESPUÉS de onConnected función de llamar
  • Android: inicio de sesión de Google con pantalla de inicio de sesión en lugar de inicio de sesión automático
  • Java.net.UnknownHostException No se puede resolver el host "accounts.google.com": ninguna dirección asociada al nombre de host al insertar filas en bigquery
  • Error al sincronizar el archivo - Android studio (app: mergeDebugResources)
  • Cuenta de Google recibe Token
  • GoogleApiClient onConnected nunca llamado Dispositivo usable
  • GoogleApiClient no se puede resolver
  • 2 Solutions collect form web for “La devolución de llamada de google api client nunca se llama”

    Nunca llamas a mGoogleApiClient.connect() después de crear tu GoogleApiClient . Su onCreate() debería ser:

     protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); buildGoogleApiClient(); mGoogleApiClient.connect(); } 

    Tenga en cuenta que no es necesario llamar a GooglePlayServicesUtil.isGooglePlayServicesAvailable() si está utilizando GoogleApiClient ya que connect() incluye esa comprobación también.

    Considere llamar a onLocationChanged() y pasar su parámetro de ubicación a mLastLocation para actualizar la ubicación continua cuando cambie la ubicación del usuario. También es posible que desee reducir el drenaje de la batería mediante el establecimiento de LocationRequest() intervalo y la distancia a un valor pequeño.

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