Использование одного экземпляра MediaBrowserCompat для всего приложения с Dagger 2
Я создал несколько экземпляров MediaBrowserCompat в действиях и фрагментах в моем приложении, и в этой ситуации каждый компонент должен создать MediaBrowserCompat и подключить его к сервису и так далее. Для простоты, это плохая идея использовать Dagger для создания только одного экземпляра MediaBrowserCompat и внедрить его в любое место, где я хочу?
Как это:
Это мой MediaBrowserModule, который создает MediaBrowserCompat
@Module
class MediaBrowserModule {
@Provides
@Singleton
fun providesMediaBrowserCompat(
context: Context,
componentName: ComponentName,
connectionCallback: MediaBrowserConnectionCallback
): MediaBrowserCompat = MediaBrowserCompat(context, componentName, connectionCallback, null)
@Provides
fun providesMediaBrowserServiceComponentName(context: Context): ComponentName =
ComponentName(context, MediaBrowserService::class.java)
@Provides
@Singleton
fun providesMediaBrowserConnectionStatus(): MutableLiveData<MediaBrowserConnectionCallback.ConnectionStatus> =
MutableLiveData()
}
Реализация обратного вызова подключения MediaBrowser:
class MediaBrowserConnectionCallback @Inject constructor(private val connectionStatus: MutableLiveData<ConnectionStatus>) :
MediaBrowserCompat.ConnectionCallback() {
override fun onConnected() {
super.onConnected()
connectionStatus.postValue(ConnectionStatus.Connected)
}
override fun onConnectionSuspended() {
super.onConnectionSuspended()
connectionStatus.postValue(ConnectionStatus.Suspended)
}
override fun onConnectionFailed() {
super.onConnectionFailed()
connectionStatus.postValue(ConnectionStatus.Failed)
}
enum class ConnectionStatus {
Connected, Suspended, Failed
}
}
наконец, я могу использовать его везде, как показано ниже:
class MainActivity : DaggerAppCompatActivity(), Observer<MediaBrowserConnectionCallback.ConnectionStatus> {
@Inject
lateinit var connectionState: MutableLiveData<MediaBrowserConnectionCallback.ConnectionStatus>
@Inject
lateinit var mediaBrowserCompat: MediaBrowserCompat
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
connectionState.observe(this, this)
}
override fun onStart() {
super.onStart()
if (!mediaBrowserCompat.isConnected)
mediaBrowserCompat.connect()
}
override fun onChanged(status: MediaBrowserConnectionCallback.ConnectionStatus?) {
Toast.makeText(this, status?.name, Toast.LENGTH_LONG).show()
}
}
Благодарю.