wake-up-neo.com

Verwendung von enableAutoManage () in Fragment

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.

24
Hamza Dabjan

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();
}
61
Matthew Pape

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();
2
Shivam Mathur

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();
1
Reid

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();
}
0
Ajitsen