web-dev-qa-db-fra.com

Récepteur de diffusion en kotlin

Comment utiliser s'inscrire et créer un récepteur de diffusion dans Android dans Kotlin. Tout conseil .... En Java, vous pouvez le créer en le déclarant comme un récepteur de diffusion.Mais à Kotlin il n'y a pas Fonction de récepteur de diffusion ... eh bien si elle est là, je ne peux pas la trouver ni comment l'utiliser.

15
Robin CK

vous pouvez le faire de la manière suivante

Créez un objet récepteur de diffusion dans votre classe d'activité

 val broadCastReceiver = object : BroadcastReceiver() {
        override fun onReceive(contxt: Context?, intent: Intent?) {

            when (intent?.action) {
                BROADCAST_DEFAULT_ALBUM_CHANGED -> handleAlbumChanged()

                BROADCAST_CHANGE_TYPE_CHANGED -> handleChangeTypeChanged()
            }
           }
          }

Enregistrer le récepteur de diffusion dans la fonction onCreate () de votre activité

 LocalBroadcastManager.getInstance(this)
                    .registerReceiver(broadCastReceiver, IntentFilter(BROADCAST_DEFAULT_ALBUM_CHANGED))

le désinscrire en fonction ondestroy de votre activité

LocalBroadcastManager.getInstance(this)
                .unregisterReceiver(broadCastReceiver)
47
v4_adi

La syntaxe de classe anonyme dans Kotlin est la suivante:

val receiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {

    }
}
5
alireza

J'ai créé une extension BroadcastReceiver Kotlin , que vous pouvez copier/coller n'importe où. Il ne fait pas beaucoup plus que ce qui est déjà mentionné, mais il réduit une partie du passe-partout. ????

En utilisant cette extension, vous devez vous inscrire/désinscrire comme ceci:

private lateinit var myReceiver: BroadcastReceiver

override fun onStart() {
    super.onStart()
    myReceiver = registerReceiver(IntentFilter(BROADCAST_SOMETHING_HAPPENED)) { intent ->
        when (intent?.action) {
            BROADCAST_SOMETHING_HAPPENED -> handleSomethingHappened()
        }
    }
}

override fun onStop() {
    super.onStop()
    unregisterReceiver(myReceiver)
}
4
w3bshark