Gibt es eine andere Möglichkeit, den Google API-Client zu verbinden?
Ich benutze automatische Vervollständigungsstellen und muss diesen Code in MYFRAGMENT verwenden
mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this)
.addApi(Places.GEO_DATA_API)
.enableAutoManage(this, GOOGLE_API_CLIENT_ID, this)
.addConnectionCallbacks(this).build();
Mein Problem mit
enableAutoManage(this, GOOGLE_API_CLIENT_ID, this)
.addConnectionCallbacks(this).build();
Ich kann nicht damit umgehen, weil ich beim Ersetzen von this
durch getActivity()
viele Probleme mit dem Casting habe
danke für hilfe und sorry wenn diese frage albern ist.
Wenn Sie enableAutoManage
verwenden möchten, müssen Sie Ihre Aktivität erweitern FragmentActivity
. Die Rückrufe sind erforderlich, damit die automatische Verwaltung von GoogleApiClient
funktioniert. Die einfachste Lösung besteht darin, Ihrer Aktivität extends FragmentActivity
Hinzuzufügen. Dann würde Ihre Besetzung nicht scheitern und die App zur Laufzeit zum Absturz bringen.
Die alternative Lösung besteht darin, den API-Client selbst zu verwalten. Sie würden die Zeile enableAutoManage
aus dem Builder entfernen und sicherstellen, dass Sie connect
/disconnect
selbst aus dem Client entfernen. Der gebräuchlichste Ort dafür ist onStart()
/onStop()
. Etwas wie...
@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();
}
Entschuldigen Sie die verspätete Antwort, aber anstatt FragmentActivity zu erweitern, können Sie AppCompatActivity erweitern ...
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();
Wenn Ihr Fragment in einer FragmentActivity oder AppCompatActivity ausgeführt wird, können Sie Folgendes tun:
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();
Meine Lösung ähnelt der akzeptierten Antwort, außer dass ich die zweite Signatur von Builder verwende, damit connectionFailedListener auch an den Konstruktor gesendet wird.
Gefolgt von mGoogleApiClient.connect()
und mGoogleApiClient.disconnect()
in onStart()
bzw. onStop()
@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();
}