广播接收器在kotlin

Rob*_* CK 18 android broadcastreceiver kotlin

如何在Kotlin中使用注册并在Android中创建广播接收器.任何意见....在Java中,你可以通过声明它作为一个广播Receiver.But在科特林创建它没有广播接收功能......嗯,如果它的存在,那么我无法找到它或如何使用它.

v4_*_*adi 53

你可以用以下方式做到这一点

在您的活动类中创建广播接收器对象

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

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

                BROADCAST_CHANGE_TYPE_CHANGED -> handleChangeTypeChanged()
            }
           }
          }
Run Code Online (Sandbox Code Playgroud)

在您的活动的onCreate()函数中注册广播接收器

 LocalBroadcastManager.getInstance(this)
                    .registerReceiver(broadCastReceiver, IntentFilter(BROADCAST_DEFAULT_ALBUM_CHANGED))
Run Code Online (Sandbox Code Playgroud)

在您的活动的ondestroy功能中取消注册它

LocalBroadcastManager.getInstance(this)
                .unregisterReceiver(broadCastReceiver)
Run Code Online (Sandbox Code Playgroud)

  • @AcademyofProgrammer 如果是全球广播,您需要在清单中注册接收器。你不要为本地广播做这件事。 (4认同)

w3b*_*ark 9

我创建了一个BroadcastReceiver Kotlin 扩展,你可以在任何地方复制/粘贴。它并没有做比已经提到的更多的事情,但它减少了一些样板。

使用这个扩展,你应该像这样注册/取消注册:

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)
}
Run Code Online (Sandbox Code Playgroud)


小智 6

Kotlin中的匿名类语法如下:

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

    }
}
Run Code Online (Sandbox Code Playgroud)

  • 真的很有帮助,谢谢!但是,您将在清单中将<receiver>的`android:name =“”属性放入什么呢? (5认同)