2

J'ai le code suivant qui fonctionne comme prévu mais quand je demande de supprimer les mises à jour de localisation en utilisant la méthode stopLocationUpdates montrée ci-dessous, mon onCompleteListener attaché removeLocationUpdates ne se déclenche pas sur la première requête malgré les mises à jour de l'emplacement arrêtées comme requis. Cependant, à la prochaine demande, le rappel onCompleteListener est déclenché.Quel est le meilleur moyen de recevoir un rappel à la fin de `removeLocationUpdates` de` FusedLocationClientProvider`

/** 
* Provides access to the fused location provider API 
*/ 
private FusedLocationProviderClient mFusedLocationClient; 


/** 
* Removes location updates from the FusedLocationApi 
*/ 
private void stopLocationUpdates() { 
    if (!mRequestingLocationUpdates) { 
     // Updates were never requested. 
     return; 
    } 

    // Remove location request when activity is in a paused or stopped state. 
    mFusedLocationClient.removeLocationUpdates(mLocationCallback) 
      .addOnCompleteListener(this, new OnCompleteListener<Void>() { 
       @Override 
       public void onComplete(@NonNull Task<Void> task) { 
        mRequestingLocationUpdates = false; 
       } 
      }); 
} 

Répondre

0

Je n'ai pas 50 répétitions. pour commenter, alors j'écris mon commentaire ici.

Si vous ajoutez un .addOnFailureListener, signale-t-il une erreur comme celle-ci sur le second plan?

W/System.err: com.google.android.gms.common.api.ApiException: 13: listener already unregistered 

RG

Mise à jour 17/04/2017:

Ajouté .addOnFailureListener (getActivity(), nouvelle OnFailureListener() ...) et .addOnSuccessListener (getActivity(), nouveau OnFailureListener(). ..) et a constaté ce qui suit:

  1. Aucun des trois (y compris la addOnCompleteListener initiale (getActivity(), nouvelle OnCompleteListener() ...)) où les auditeurs a appelé ce (premier) remo Demande de mise à jour de veLocation.

  2. Sur la deuxième demande, auditeur addOnCompleteListener où d'abord appelé (tout semble ok), puis l'écouteur de onFailureListener avec l'erreur suivante:

    W/System.err: com.google.android.gms.common. api.ApiException: 13: auditeur déjà non enregistré

il semble que l'auditeur ne soit pas le premier rappel jusqu'à ce que la deuxième demande, et il appelle le (il est entassé sur une pile?) (correctement?) errorlistener pour indiquer que l'écouteur est déjà non enregistré ...

bizarre ... ou pas?

de toute façon je vais déposer un rapport de bug, si ce n'est pas déjà fait. J'utilise la base de feu v11.4.2, les services de jeu v11.4.2, v26.1.0 android.support et v3.1.1 de com.google.gms: google-services.

RG

+1

vient de tester cela avec l'exemple "LocationUpdates" comme décrit ici: testé à la fois sur l'appareil (Android 5.0) et émulateur (Android 7.0), même mauvais comportement. l'écouteur ne reçoit pas la requête 1. demandée, mais la requête 2. appelle à la fois onComplete et onFailure (signalant déjà un écouteur non enregistré). Lien vers le rapport de bogue: J'espère qu'ils le verront ... –