FU Lecture 14
FU Lecture 14
Broadcast Receiver
Broadcast Receiver
Agenda
Broadcast Receiver
• Finish
Broadcast Receiver - Manifest File
If you view AndroidManifest.xml in the XML editor, you
should see something like this
<receiver
android:name="MyBroadcastReceiver"></receiver>
Broadcast Receiver
Your new Broadcast Receiver file should look something like this
@Override
public void onReceive(Context context, Intent intent) {
}
}
Broadcast Receiver
@Override
public void onReceive(Context context, Intent intent) {
}
}
Broadcast Receiver
@Override
public void onReceive(Context context, Intent intent) {
}
}
Registering BroadcastReceiver
There are two ways to register a BroadcastReceiver to
listen for a broadcast
2. Programmatically
Registering BroadcastReceiver
1. To add an <intent-filter> to the Manifest and listen for a
Broadcast ...
<receiver android:name="MyBroadcastReceiver">
</receiver>
Registering BroadcastReceiver
We need to tell the system which broadcast(s) we want to
listen for. First we need to add an <intent-filter> tag
<receiver android:name="MyBroadcastReceiver">
</receiver>
Registering BroadcastReceiver
We need to tell the system which broadcast(s) we want to
listen for. First we need to add an <intent-filter> tag
</receiver>
Registering BroadcastReceiver
We need to tell the system which broadcast(s) we want to
listen for. First we need to add an <intent-filter> tag
Select <intent-filter>
<receiver android:name="MyBroadcastReceiver">
</receiver>
Registering BroadcastReceiver
We need to tell the system which broadcast(s) we want to
listen for. First we need to add an <intent-filter> tag
<receiver android:name="MyBroadcastReceiver">
<intent-filter>
</intent-filter>
</receiver>
Registering BroadcastReceiver
We need to tell the system which broadcast(s) we want to
listen for. First we need to add an <intent-filter> tag
an <intent-filter>
<receiver android:name="MyBroadcastReceiver">
describes what this
receiver should listen for
<intent-filter>
</intent-filter>
</receiver>
Registering BroadcastReceiver
We need to tell the system which broadcast(s) we want to
listen for. First we need to add an <intent-filter> tag
</intent-filter>
</receiver>
Registering BroadcastReceiver
We need to tell the system which broadcast(s) we want to
listen for. First we need to add an <intent-filter> tag
<receiver android:name="MyBroadcastReceiver">
Select <action/>
<intent-filter>
</intent-filter>
</receiver>
Registering BroadcastReceiver
We need to tell the system which broadcast(s) we want to
listen for. First we need to add an <intent-filter> tag
<receiver android:name="MyBroadcastReceiver">
Select android:name
<intent-filter>
<action />
</intent-filter>
</receiver>
Registering BroadcastReceiver
We need to tell the system which broadcast(s) we want to
listen for. First we need to add an <intent-filter> tag
<receiver android:name="MyBroadcastReceiver">
Select android.intent.action.TIME_SET
<intent-filter>
<action android:name=" "/>
</intent-filter>
</receiver>
Registering BroadcastReceiver
We need to tell the system which broadcast(s) we want to
listen for. First we need to add an <intent-filter> tag
<receiver android:name="MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.TIME_SET"/>
</intent-filter>
</receiver>
Registering BroadcastReceiver
We need to tell the system which broadcast(s) we want to
listen for. First we need to add an <intent-filter> tag
<receiver android:name="MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.TIME_SET"/>
</intent-filter>
</receiver>
Registering BroadcastReceiver
MyBroadcastReceiver receiver;
registerReceiver(receiver, filter);
}
}
Registering BroadcastReceiver
public class MainActivity extends Activity {
MyBroadcastReceiver receiver;
registerReceiver(receiver, filter);
}
}
Registering BroadcastReceiver
public class MainActivity extends Activity {
MyBroadcastReceiver receiver;
registerReceiver(receiver, filter);
}
}
Registering BroadcastReceiver
public class MainActivity extends Activity {
MyBroadcastReceiver receiver;
registerReceiver(receiver, filter);
}
}
BroadcastReceiver - onReceive() Now let's look at our
BroadcastReceiver
Toast.makeText(
context,
"Broadcast Received!",
Toast.LENGTH_LONG).show();
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent);
}
BroadcastReceiver - onReceive()
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
At this point, the
public void onReceive(Context
broadcast has been context, Intent intent) {
received
Toast.makeText(
context,
"Broadcast Received!",
Toast.LENGTH_LONG).show();
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent);
}
BroadcastReceiver - onReceive()
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
Let's say we want to
launch a new Activity
public void onReceive(Context context, Intent intent) {
when we receive the
broadcast
Toast.makeText(
context,
"Broadcast Received!",
Toast.LENGTH_LONG).show();
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent);
}
BroadcastReceiver - onReceive()
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
AndIntent
we wantmyIntent
to show a =
new Intent(context,
Toast
ActivityToBeLaunched.class);
Toast.makeText(
context,
"Broadcast Received!",
Toast.LENGTH_LONG).show();
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent);
}
BroadcastReceiver - onReceive()
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(
context,
You need to add flags
"Broadcast
to your intent this time
Received!",
Toast.LENGTH_LONG).show();
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent);
}
BroadcastReceiver - onReceive()
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(
context,
Calling startActivity() from outside of
"Broadcast Received!",
an Activity context requires the
FLAG_ACTIVITY_NEW_TASK flag
Toast.LENGTH_LONG).show();
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(myIntent);
}
Unregistering BroadcastReceiver
@Override
public void onPause() {
unregisterReceiver(receiver);
super.onPause();
}
}
Unregistering BroadcastReceiver
public class MainActivity extends Activity {
unregisterReceiver(receiver);
super.onPause();
}
}
Unregistering BroadcastReceiver
If you register a BroadcastReceiver
programmatically, you should unregister it
before your Activity is destroyed!
• otherwise you will have a "leaked" receiver
• Please call unregisterReceiver in
o onPause()
o onStop()
o or onDestroy()
This is important