2017-07-29 21 views
3

如何在Kotlin中使用注册并在Android中创建Broadcast Receiver。任何建议.... 在Java中,你可以通过声明它是一个广播接收器来创建它。但是在Kotlin中没有广播接收器功能......好吧,如果它存在,那么我无法找到它或如何用它。kotlin中的广播Reciver

+0

你是什么意思说“不存在广播接收功能”?从Kotlin你可以看到你可以从Java看到的相同的类。 –

+1

谢谢advice.It真的对我很重要。 –

回答

12

你可以做到这一点通过以下方式

在活动类

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)) 

注销它在你的活动

LocalBroadcastManager.getInstance(this) 
       .unregisterReceiver(broadCastReceiver) 
+0

嗨怎么样清单文件来设置Receiver? –

+1

@Academy of Programmer您需要在清单中注册接收者,如果它是全球广播。你不要为本地广播做。 –

2
在科特林

匿名类的语法是这样的:

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

    } 
} 
+1

真的很有帮助,谢谢!但是你会在清单中将''的'android:name =“”'属性放在什么位置? – Lissy

2

的OnDestroy函数中我已经创建了一个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) 
}