web-dev-qa-db-ja.com

kotlinの放送受信機

Registerを使用して、Androidでブロードキャストレシーバーを作成する方法。任意のアドバイス.... Javaでは、ブロードキャストレシーバーとして宣言することで作成できます。ブロードキャストレシーバー機能...それが存在する場合、それを見つけることができず、使用方法もわかりません。

15
Robin CK

次の方法でそれを行うことができます

アクティビティクラスにブロードキャストレシーバーオブジェクトを作成します。

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

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

                BROADCAST_CHANGE_TYPE_CHANGED -> handleChangeTypeChanged()
            }
           }
          }

アクティビティのonCreate()関数にブロードキャストレシーバーを登録する

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

アクティビティのondestroy関数で登録を解除します

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

Kotlinの匿名クラス構文は次のとおりです。

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

    }
}
5
alireza

BroadcastReceiver Kotlin extension を作成しました。これはどこにでもコピー/貼り付けできます。既に述べた以上のことはしませんが、定型文の一部を減らします。 ????

この拡張機能を使用して、次のように登録/登録解除する必要があります。

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