Introduce Broadcast

James Lin
4 min readJun 29, 2018

--

Dynamic Broadcast

使用Broadcast,可以達到不用理會接收端(receiver)的狀況,一直發送消息。

首先,Create自己的Recevier。

class MyBroadcastRecevier : BroadcastReceiver() {
companion object {
private val TAG = "MyBroadcastRecevier"
}

override fun onReceive(context: Context?, intent: Intent?) {
var string: StringBuilder = StringBuilder()
string.append("Action " + intent!!.action + " ")
string.append("URI " + intent!!.toUri(Intent.URI_INTENT_SCHEME).toString() + "\n")
var log = string.toString()
Log.d("TAG", log)
Toast.makeText(context!!, log, Toast.LENGTH_LONG).show()
}
}

接著在MainActivity中regist recevier。

var br=MyBroadcastRecevier()
....
//register Receiver
var iFilter = IntentFilter()
iFilter.addAction(Config.flag)
// this.registerReceiver(br, iFilter)
LocalBroadcastManager.getInstance(applicationContext).registerReceiver(br, iFilter)

說明一下,由LocalBroadcastManager註冊的Receiver只能接收自己app的Broadcast。

Send Broadcast,一樣使用LocalBroadcastManager,發送消息給內部(自己的app)的Receiver。

sendBtn.setOnClickListener {
var
i = Intent()
i.setAction(Config.flag)
LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(i)
}

Static Broadcast

首先,先 Create 一個 Receiver。這個東西就算你的 app 是關閉的,他還是會 run 你的 app 中的 Receiver。

class StaticBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
//test receiver run main thread
Toast.makeText(context, Thread.currentThread().toString(), Toast.LENGTH_LONG).show()
}
}

然後 AndroidManifest 宣告 Receiver,也就是說只要有 Hello action 的 intent 傳入都會交由 .staticReceiver.StaticBroadcastReceiver 處理

...
<receiver
android:name=".staticReceiver.StaticBroadcastReceiver"
android:exported="true"
>
<intent-filter>
<action android:name="Hello" />
/>
</intent-filter>
</receiver>
</application>

發送 Broadcast,Action 設定 Hello。

sendBtn.setOnClickListener {
var
i = Intent()
i.setAction("Hello")
sendBroadcast(i)
}

GitHub

--

--

James Lin
James Lin

No responses yet