|
Pro Android with Kotlin@de android telegram Pro Android with Kotlin Developing Modern Mobile44
CHAPTER 5: Broadcasts
Explicit Broadcasts
An
explicit broadcast
is a broadcast published in such a way that there is exactly one
receiver addressed by it. This usually makes sense only if both broadcast publishers and
subscribers are part of the same app or, less frequently, part of the same app collection if
there is a strong functional dependency among them.
There are differences between local and remote broadcasts: local broadcast receivers
must
reside in the same app, they run fast, and receivers cannot be declared inside
AndroidManifest.xml
. Instead, a programmatical registration method must be used for local
broadcast receivers. Also, you must use the following to send local broadcast messages:
// send local broadcast
LocalBroadcastManager.getInstance(Context).
sendBroadcast(...)
Remote broadcast receivers, on the other hand,
can
reside in the same app, they are slower,
and it is possible to use
AndroidManifest.xml
to declare them. To send remote broadcasts,
you write the following:
// send remote broadcast (this App or other Apps)
sendBroadcast(...)
Explicit Local Broadcasts
To send a local broadcast message to a local broadcast receiver inside the same app, you
write the following:
val intent = Intent(this, MyReceiver::class.java)
intent.action = "de.pspaeth.simplebroadcast.DO_STH"
intent.putExtra("myExtra", "myExtraVal")
Log.e("LOG", "Sending broadcast")
LocalBroadcastManager.getInstance(this).
sendBroadcast(intent)
Log.e("LOG", "Broadcast sent")
Here,
MyReceiver
is the receiver class.
class MyReceiver : BroadcastReceiver() {
override
fun onReceive(context: Context?, intent: Intent?) {
Toast.makeText(context, "Intent Detected.",
Toast.LENGTH_LONG).show()
Log.e("LOG", "Received broadcast")
Note
Local broadcasts should be favored over remote broadcasts for performance reasons. The
apparent disadvantage of not being able to use
AndroidManifest.xml
to declare local receivers
does not matter too much, since starting with Android 8.0 (API level 26) the use cases of declaring
broadcast receivers inside the manifest files are limited anyway.
|
|
|