google client api callback n'est appelé
Je suis en train d'essayer d'obtenir le dernier emplacement connu à l'aide des services google API, mais après j'ai construit la GoogleApiClient, pas de méthode de rappel est jamais déclenché.
Mon activité ressemble à ça :
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();
}
J'ai placé des points d'arrêt sur toutes les méthodes de rappel, voici comment je sais que rien est appelé.
Parce que, à ce stade, je ne suis pas à l'aide de Google Map Api, je n'ai pas enregistré mon appli pour obtenir une clé. Ai-je besoin de le faire même si je viens d'obtenir l'emplacement ?
N'hésitez pas à me dire si vous avez besoin de plus d'infos.
Merci à vous tous.
OriginalL'auteur JDenais | 2015-03-16
Vous devez vous connecter pour publier un commentaire.
Vous n'appelez jamais
mGoogleApiClient.connect()
après la construction de votreGoogleApiClient
. VotreonCreate()
devrait plutôt être:Noter qu'il n'est pas nécessaire d'appeler
GooglePlayServicesUtil.isGooglePlayServicesAvailable()
si vous utilisezGoogleApiClient
commeconnect()
comprend que l'enregistrement en tant que bien.Merci s'accoupler. Ça fait mal mes sentiments un peu pour avoir manqué la méthode connect() de l'Api client =) Peut-être que google devrait le rendre plus évident int la documentation de formation parce que j'ai vraiment eu l'impression que le Constructeur était d'établir la connexion.
Merci, j'ai récemment trouvé la question et cette réponse m'a aidé 🙂
omfg, j'ai lu google docs pour plus d'une heure et ils n'ont jamais utiliser cette méthode. Merci!!!!
Donc dans mon cas maintenant GoogleApiClient.connect() ne fonctionne pas du tout, ce pourrait être une raison, s'il vous plaît suggérer !!
OriginalL'auteur ianhanniballake
envisager la convocation d'
onLocationChanged()
et en passant, le paramètre Emplacement demLastLocation
continue emplacement de mise à jour lorsque l'utilisateur change d'emplacement. Aussi, vous voudrez peut-être réduire la consommation de votre batterie par la mise enLocationRequest()
et de l'intervalle de distance à une valeur plus petite.OriginalL'auteur cooljay