Existe-t-il un autre moyen de connecter le client Google API?
J'utilise des emplacements de saisie automatique et je dois utiliser ce code quelque part dans MYFRAGMENT
mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this)
.addApi(Places.GEO_DATA_API)
.enableAutoManage(this, GOOGLE_API_CLIENT_ID, this)
.addConnectionCallbacks(this).build();
Mon problème avec
enableAutoManage(this, GOOGLE_API_CLIENT_ID, this)
.addConnectionCallbacks(this).build();
Je ne peux pas y faire face car quand je remplace this
par getActivity()
j'ai beaucoup de problèmes avec le casting
merci pour l'aide et désolé si cette question est idiote.
Si vous souhaitez utiliser enableAutoManage
, vous devez étendre votre activité FragmentActivity
. Les rappels qu'il effectue sont requis pour que la gestion automatique de GoogleApiClient
fonctionne. La solution la plus simple consiste donc à ajouter extends FragmentActivity
À votre activité. Ensuite, votre distribution n'échouerait pas et entraînerait le blocage de l'application au moment de l'exécution.
La solution alternative consiste à gérer le client api vous-même. Vous supprimeriez la ligne enableAutoManage
du générateur et vous assurer vous-même connect
/disconnect
du client. L'endroit le plus courant pour ce faire est onStart()
/onStop()
. Quelque chose comme...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this)
.addApi(Places.GEO_DATA_API)
.addConnectionCallbacks(this).build();
}
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
@Override
protected void onStop() {
super.onStop();
mGoogleApiClient.disconnect();
}
Désolé pour la réponse tardive, mais plutôt que d'étendre FragmentActivity, vous pouvez étendre AppCompatActivity ...
public class YourActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener
.....
mCredentialsApiClient = new GoogleApiClient.Builder(context)
.addConnectionCallbacks(this)
.enableAutoManage(this,this)
.addApi(Auth.CREDENTIALS_API)
.build();
Si votre fragment s'exécute dans une FragmentActivity ou AppCompatActivity, vous pouvez faire quelque chose comme ceci:
mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
.enableAutoManage((FragmentActivity) getActivity() /* FragmentActivity */, new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
// your code here
}
})
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
Ma solution est similaire à la réponse acceptée, sauf que j'utilise la deuxième signature de Builder pour que connectionFailedListener soit également envoyée au constructeur.
Suivi de mGoogleApiClient.connect()
et mGoogleApiClient.disconnect()
dans onStart()
et onStop()
respectivement
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGoogleApiClient = new GoogleApiClient.Builder(this /*context*/ , this /*connectedListener*/, this /**connectionFailedListener/)
.addApi(Places.GEO_DATA_API)
.build();
}