2017-07-29 22 views
3

登録を使用してKotlinのAndroidで放送受信機を作成する方法。任意のアドバイス.... Javaでは、ブロードキャストレシーバとして宣言することでそれを作成することができます。しかし、Kotlinではブロードキャストレシーバ機能はありません...それがあれば、それを見つけることができません。これを使って。kotlinの放送受信機

+0

あなたは「は放送受信機の機能はありません」と言って何を意味するのですか? Kotlinから、あなたはJavaから見ることができる同じクラスを見ることができます。 –

+1

アドバイスをいただきありがとうございます。本当に私にとっては大変です。 –

答えて

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)) 
012私はあなたがどこでも/貼り付けをコピーすることができ BroadcastReceiver Kotlin extensionを、作成したあなたの活動のondestroy機能でそれ登録解除

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

こんにちは、受信者を設定するマニフェストファイルはどうですか? –

+1

@AcademyofProgrammer国際放送の場合、マニフェストに受信機を登録する必要があります。あなたは地元放送のためにそれをしないでください。 –

2
Kotlinで

匿名クラスの構文は次のようである:

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

    } 
} 
+1

本当に助かりました、ありがとう!しかし、マニフェストに ''の 'android:name =" "'属性として何を入れますか? – Lissy

2

。 すでに言及した以上のことはしませんが、定型文の一部が減ります。この拡張機能を使用して

、あなたが登録/そのように登録を解除する必要があります

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) 
} 
関連する問題