KotlinでLocalBloadcastをやってみる
Androidエンジニアにとってブロードキャストは日常的によく使うものだと思いますが、Andorid初心者の私にとってはブロードキャストわからなすぎてハマりました。
LocalBloadcast
通常のBloadcastでは端末全体のアプリにブロードキャストを飛ばしますが、LocalBloadcastはアプリ内だけに飛ばすので、セキュリティ的に安全らしいです。
サンプルプロジェクト
ボタンを押すとintentをbloadcastで飛ばしてMyReceiverの中の処理が呼ばれます。
class MainActivity : AppCompatActivity() {
companion object {
val ACTION_CALL = "called";
}
//レシーバー
var localReceiver: BroadcastReceiver? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val button = findViewById<Button>(R.id.button)
button.setOnClickListener {
action()
}
localReceiver = MyReceiver()
//アクションを登録しておく
val i = IntentFilter()
i.addAction(MainActivity.ACTION_CALL)
//マネージャーに登録する
LocalBroadcastManager.getInstance(this).registerReceiver(localReceiver as MyReceiver, i)
}
fun action(){
val intent = Intent(ACTION_CALL)
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
}
}
今回はアクションで飛ばすものをACTION_CALL一つしか作成していませんが、これを複数用意すると処理ごとに分けられます。
レシーバークラス
class MyReceiver: BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val action = intent.action
if (action == MainActivity.ACTION_CALL) {
Log.i("bloadcast", "呼ばれたよ")
}
}
}