I've started using Dagger2 to manage dependencies and I'm trying to understand how I can use DI to provide a singleton GoogleApiClient. The motivations for this are:
- reduce boilerplate code: multiple Activities & Fragments require a GoogleApiClient
- improve testability: currently these Activities and Fragments are not well tested
I want to provide a Singleton GoogleApiClient at the Application scope.
How do you handle callbacks? Whether you choose an auto-managed or manually-managed connection, there are some callbacks that must be handled:
- GoogleApiClient.ConnectionCallbacks (manual only)
- GoogleApiClient.OnConnectionFailedListener (both)
You can use the injection to create the client
@Provides
@Singleton
GoogleApiClient providesGoogleApiClient(Context context) {
return new GoogleApiClient.Builder(context)
.addApi(Places.GEO_DATA_API)
.addApi(LocationServices.API)
.build();
}
And then manage the call backs on your activity
@Inject GoogleApiClient mGoogleApiClient;
if (mGoogleApiClient != null) { mGoogleApiClient.registerConnectionCallbacks(this); mGoogleApiClient.registerConnectionFailedListener`(this);
}
I hope this might help you.
来源:https://stackoverflow.com/questions/35972868/how-do-you-provide-a-googleapiclient-dependency-with-dagger2